You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python将字典数据插入SQL数据库表的最简实现方法

问题场景

我有一个包含如下键值对的字典:

my_dict = {'a':33, 'b': 'something', 'c': GETDATE(), 'd': 55}

假设SQL表的列名与字典的键名完全一致,即列名为a,b,c,d,实际使用的字典包含20组以上的键值对。

现有实现问题

我已通过pyodbc.connect创建了可执行SQL INSERT语句的cursor游标对象,当前编写的插入代码如下:

for k in my_dict.keys():
    cursor.execute(
    '''
        INSERT INTO TABLEabc (%s)
        VALUES (%s)
    '''
    % (k, my_dict[k])
    )

注:该实现除了每次循环执行独立SQL、效率极低的问题外,字符串拼接构造SQL的写法还存在SQL注入风险,不推荐使用。

目前需要解决两个问题:

  1. 若使用循环实现插入,最简单的编写方式是什么?
  2. 如何编写代码实现单条INSERT语句一次性插入所有字典值?

解决方案

1. 循环插入的最简高效写法

不要在循环里逐次调用execute发起SQL请求,使用pyodbc提供的executemany做批量提交,全程使用参数化查询规避注入风险:

# 构造参数化插入模板
columns = ','.join(my_dict.keys())
placeholders = ','.join(['?'] * len(my_dict))
insert_sql = f"INSERT INTO TABLEabc ({columns}) VALUES ({placeholders})"

# 批量提交数据
cursor.executemany(insert_sql, [tuple(my_dict.values())])
cursor.commit()

如果是插入多组数据(比如多个同结构字典组成的列表),只需要把每个字典的值转成元组,统一放到参数列表里传入即可,执行效率比逐次循环调用execute高一个数量级。

2. 单条INSERT插入全量值的写法

直接提取字典所有列名、对应值,构造单条参数化SQL执行即可。如果字典里包含GETDATE()这类需要在SQL侧执行的函数,需要特殊处理不做参数绑定,普通值统一走参数传递:

cols = []
params = []
val_placeholders = []

for k, v in my_dict.items():
    cols.append(k)
    # 识别SQL内置函数,直接拼接到SQL语句中
    if isinstance(v, str) and v.endswith('()'):
        val_placeholders.append(v)
    else:
        val_placeholders.append('?')
        params.append(v)

final_sql = f"INSERT INTO TABLEabc ({','.join(cols)}) VALUES ({','.join(val_placeholders)})"
cursor.execute(final_sql, params)
cursor.commit()

如果字典里没有需要SQL侧执行的函数,写法可以大幅简化:

columns = ','.join(my_dict.keys())
placeholders = ','.join('?' * len(my_dict))
sql = f"INSERT INTO TABLEabc ({columns}) VALUES ({placeholders})"
cursor.execute(sql, tuple(my_dict.values()))
cursor.commit()

内容的提问来源于stack exchange,提问作者Mitch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 19:29:00