Python使用PyMySQL向MySQL插入数据及端口配置报错排查
本文通过Python使用PyMySQL库向MySQL数据库插入数据的实例,详细展示了标准代码结构。重点分析了一个常见陷阱:在建立数据库连接时,端口号(port)参数若被错误地加上引号导致类型不匹配,会引发难以定位的错误。通过对比调试过程,强调了参数类型必须严格符合API要求,特别是数值型端口不应加引号,以帮助用户避免此类低级错误。
PyMySQL插入数据标准代码示例
我们直接通过代码示例来了解具体实现。
from pymysql import *
def main():
# 创建connection连接
conn = connect(host='', port=3306, database='', user='',
password='', charset='utf8')
# 获取cursor对象
cs1 = conn.cursor()
# 执行sql语句
query = 'insert into 表名(列名1, 列名2, 列名3, 列名4, 列名5, 列名6) values(%s, %s, %s, %s, %s, %s)'
列名1 = 值1
列名2 = 值2
列名3 = 值3
列名4 = 值4
列名5 = 值5
列名6 = 值6
values = (列名1, 列名2, 列名3, 列名4, 列名5, 列名6)
cs1.execute(query, values)
# 提交之前的操作,如果之前已经执行多次的execute,那么就都进行提交
conn.commit()
# 关闭cursor对象
cs1.close()
# 关闭connection对象
conn.close()
if __name__ == '__main__':
main()
补充内容:记录一次学习PyMySQL插入数据时遇到的典型错误。
在学习Python进行简单的MySQL操作时,正确的代码实现如下所示:
常见错误排查:端口号类型问题
import pymysql.cursors
# 获取数据库连接
connection = pymysql.connect(
host='xx.xx.xx.xx',
port=3310,
user='root',
password='root',
db='wiki'
)
try:
#获取会话指针
with connection.cursor() as cursor:
# 创建sql语句
sql = "insert into `user`(`name`,`age`,`sex`) values (%s,%s,%s)"
# 执行sql
cursor.execute(sql,("lisi",18,"f"))
# cursor.execute(sql)
# 提交
connection.commit()
except:
print("something wrong")
db.rollback()
finally:
connection.close()
然而,在运行过程中出现了一个令人困扰的问题,系统始终抛出如下错误信息:

起初怀疑是数据库连接建立环节的问题,但仔细检查后并未发现db赋值存在明显逻辑错误。随后注意到末尾的%d格式问题,直觉认为是插入数据时的赋值环节出错,但排查后依然未果。于是尝试将赋值直接硬编码到SQL语句中,例如执行"insert into `user`(`name`,`age`,`sex`) values ('zhangsan',18,'f')",本以为这样能避免参数传递问题,结果依然报错。由此排除SQL赋值本身的逻辑错误,重新审视db="wiki"这一行代码时,突然注意到port='3310'这一配置。联想到端口号是否不应添加引号,抱着尝试的心态去掉引号后,程序运行正常。
此时感到十分无奈。查看控制台报错信息,错误提示完全未指向port这一行。通常情况下,我们习惯在报错行及其下方代码中寻找原因,但这次错误却“跑”到了上面。
最终结论是:数据类型必须严格匹配,务必保持细心,引以为戒。
以上关于在Python中使用PyMySQL向MySQL数据库插入数据的实例分享完毕,希望能为读者提供参考,也欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













