我正在尝试生成一个变量,我可以使用该变量将多行插入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注入攻击引导.
标签:python,sql,mysql,database,insert
来源: https://codeday.me/bug/20190825/1723906.html