将dictionary作为参数传递给mysql.conn

2024-06-24 13:42:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组半工作的,不安全的函数mysql.connector它可以接受以下形式的数据。它是灵活的,因为我可以设计任何大小的字典,我需要。在

db_data={
"column01" : 'test',
"column02" : 51,
"column03" : None
}
columns = db_data.keys()
values = db_data.values()
tablename = "mytable"

它“工作”很好,但不安全(虽然它只是内部使用,所以我不关心这里的安全性),但我也不能将“None”(空对象)传递给mysql。在

^{pr2}$

我会得到一个错误:

Something went wrong: 1054 (42S22): Unknown column 'None' in 'field list'

根据如何正确设计它的建议,我尝试过这种方法,但我无法让字符串格式以同样的方式传递字典,因此我有点拘泥于此:

safe_query = "INSERT INTO %s (%s) VALUES (%s)"
cursor.execute(safe_query, (tablename, ', '.join(map(repr, columns)), ', '.join(map(repr, values))) )
# cursor.execute(safe_query, (tablename, ', '.join(map(str, columns)), ', '.join(map(str, values))) ) # this won't work either

获取错误:

Something went wrong: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''mytable' ('\'column01\', \'column02\', \'column03\'') VALUES ('\'test\', ' at line 1

也许有人可以建议如何绕过它,让mysql空对象工作。理想的情况是有一个适当的,安全的查询,但这不是我最重要的问题。在


Tags: columnstestnonemapdbdata字典mysql
1条回答
网友
1楼 · 发布于 2024-06-24 13:42:40

您可能希望驱动程序处理您的值,并将其他值平均为字符串:

query = "INSERT INTO {} ({}) VALUES ({})".format(tablename, ', '.join(columns), ','.join(['%s']*len(values)))
cursor.execute(query, values)

更好的是,您可以直接使用dict:

^{pr2}$

无论如何,我一开始就不鼓励这种字符串格式。如果您现在预先设置了表名和列名,并且这不会改变,那么您可能会通过硬编码除值之外的所有内容来获得更可读、更可靠的代码。在

相关问题 更多 >