我有一组半工作的,不安全的函数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空对象工作。理想的情况是有一个适当的,安全的查询,但这不是我最重要的问题。在
您可能希望驱动程序处理您的值,并将其他值平均为字符串:
更好的是,您可以直接使用dict:
^{pr2}$无论如何,我一开始就不鼓励这种字符串格式。如果您现在预先设置了表名和列名,并且这不会改变,那么您可能会通过硬编码除值之外的所有内容来获得更可读、更可靠的代码。在
相关问题 更多 >
编程相关推荐