我正在尝试生成一个变量,我可以使用该变量将多行插入 MySQL 数据库或保存到文件。
由于我是 Python 的新手,我的脑子里现在充满了我必须学习的所有新概念,我正在寻找一点保证我的方法是好的。
向表中插入多个项目的 SQL 语法是这样的:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data3', 'data4'),
('data5', 'data6'),
('data7', 'data8');
这是我的代码:
import shelve
shelf = shelve.open('test.db', flag='r')
sql = "INSERT INTO 'myTableName' ( "
sql += ", ".join(shelf.itervalues().next())
sql = " ) VALUES "
for s in shelf:
sql += "( "
sql += ', '.join(['\'%s\'' % ( value ) for (key, value) in shelf[s].items()])
sql += " ),"
shelf.close()
print sql
它几乎可以工作(它有一个尾随的 , 而不是 ; 在最后的 sql 添加上)但我确信必须有一个更简洁的方法。你能告诉我它是什么吗?
最佳答案
不要从字符串连接生成 SQL。改用 SQL 参数:
cursor = connection.cursor()
cursor.executemany('INSERT INTO 'tablename' ('column1', 'column2') VALUES (%s, %s)',
[sub.values() for sub in shelf.values()])
然后数据库可以重用INSERT
语句(它为它准备了一个查询计划),数据库客户端层会为你处理引用,你就可以防止SQL注入(inject)启动攻击。
关于python - 使用 Python 生成一条 SQL 语句以一次将多行插入 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712004/