我正在尝试将虚拟数据插入mysql数据库。
数据库结构如下所示: database name: messaround database table name: test
表结构: id (Primary key, auto increment) path (varchar(254))
更新了下面的2个方法,出现错误。我有一个方法可以尝试通过以下方式插入:
def insert_into_db(dbcursor, table, *cols,**vals):
try:
query = "INSERT INTO {} ({}) VALUES ('{}')".format(table, ",".join(cols), "'),('".join(vals))
print(query)
dbcursor.execute(query)
dbcursor.commit()
print("inserted!")
except pymysql.Error as exc:
print("error inserting...\n {}".format(exc))
connection=conn_db()
insertstmt=insert_into_db(connection, table='test', cols=['path'], vals=['test.com/test2'])
然而,这并不是说:
INSERT INTO test () VALUES ('vals'),('cols')
error inserting...
(1136, "Column count doesn't match value count at row 1")
你能帮忙吗?
谢谢您。
4条答案
按热度按时间ogq8wdun1#
如果使用代码:
python返回:
另一方面:
python将返回正确的sql:
2q5ifsrm2#
您应该打印您生成的sql语句,这样可以更容易地看到错误所在。
但我想你需要报价
'
关于字符串值",".join(vals)
(如果有字符串值。所以你的代码产生了
但它应该产生
否则试试看https://github.com/markuman/mariasql/ 这使得使用pymysql向mariadb/mysql插入数据非常容易。
fjnneemd3#
通常在python中,将参数化查询传递给db驱动程序。参见pymysql文档中的这个例子;它构建了
INSERT
使用占位符进行查询,然后调用cursor.execute()
传递查询和实际值的元组。出于安全目的,还建议使用参数化查询,因为它可以抵御许多常见的sql注入攻击。
5f0d552i4#
更改您的查询如下
在使用join时,变量应该是列表而不是字符串
更新: