python - 使用 dict 对 SQL 插入进行字符串格式化

标签 python mysql

以下是我通常在 MySQLdb 中添加参数的方式:

cursor.execute('INSERT INTO main_territory (code, name) VALUES (%s, %s)', (item[0], item[1]))

有没有办法让字符串格式化更直观?例如,如果我在 INSERT 中有 50 个参数。类似于:

cursor.execute('''INSET INTO main_territory (code, name) VALUES ({code}, {name})''',
                  {code=item[0], name=item[1}
               )

最佳答案

这取决于数据库驱动程序。通常,如果支持位置参数 (%s),则可以使用 %(name)s 格式命名参数:

cursor.execute(
    '''INSERT INTO main_territory (code, name) VALUES (%(code)s, %(name)s)''',
    {'code': item[0], 'name': item[1]})

然后参数值作为字典传入。

最常用的MySQL数据库适配器,MySQLdb支持这种风格。

其他数据库适配器使用 ?:name 作为位置和命名参数;您可以通过 paramstyle attribute 查询使用的样式在模块上:

>>> import MySQLdb
>>> MySQLdb.paramstyle
'format'

但由于大多数驱动程序都支持位置样式和命名样式,因此它们通常只命名其中一种('format''qmark'),同时还支持命名变体。请务必查阅文档来验证这一点。

关于python - 使用 dict 对 SQL 插入进行字符串格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721519/

相关文章:

python - 从字典中选择值以创建新的 DataFrame 列

python - 如何在 dask 数据框中设置(计算)分区?

python - 循环遍历mysql数据库中的所有表

mysql - 是否可以使用 mysqldump 转储和导入 View ?

mysql - SQL查询返回重复行

python - python中socket.PF_PACKET和socket.AF_INET的区别

python - selenium webdriver 在带有 firefox 浏览器的 headless Linux 上使用 python 在下拉菜单中选择一个选项

mysql - 选择具有许多子行的行

mysql - sql pair 两个结果在两个不同的列中

python - 不使用 virtualenv 时安装包的位置