python - 使用 Python 生成一条 SQL 语句以一次将多行插入 MySQL 数据库

标签 python mysql sql database insert

我正在尝试生成一个变量,我可以使用该变量将多行插入 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/

相关文章:

python - 不遵守最小、最大限制的垂直线(matplotlib)

python - 我尝试抓取的 html 内容仅在我导航到网站内的某个 anchor 时才会加载

php - Laravel 结合两个表帖子 + 标签

mysql - Netbeans - "Entity Classes from Database"创建空类文件

sql - 可以使用 postgres 获取 json 数组中值的平均值吗?

sql - 向数据库中的所有表添加位掩码有用吗?

python - NumPy 库导入错误 : DLL load failed: The specified procedure could not be found

python - Mongoengine - 命令查找需要身份验证

mysql - 在 Entity Framework 6 中使用 MySQL 和 MSSQL

mysql - 根据发送mysql通知的次数查找用户