Python 任意字典生成 SQL(insert 语句)

本文介绍如何使用Python动态生成SQL插入语句,通过列表推导式和repr函数实现对字典数据的有效处理,适用于爬虫等场景下批量数据写入数据库的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、示例

1.1、完整代码

tb = 'student'
dt = {'name': 'ArYe', 'age': 15, 'height': None}
ls = [(k, v) for k, v in dt.items() if v is not None]
sentence = 'INSERT %s (' % tb + ','.join([i[0] for i in ls]) +\
           ') VALUES (' + ','.join(repr(i[1]) for i in ls) + ');'
print(sentence)
打印结果
INSERT student (name,age) VALUES (‘ArYe’,15);

1.2、过程拆解

table_name = 'student'
dt = {'name': '小基', 'enrollment_date': '2004-09-01', 'age': 12, 'weight': None}
# 构造INSERT语句
ls = [(k, dt[k]) for k in dt if dt[k] is not None]
sql1 = 'INSERT %s (' % table_name
sql2 = ','.join(i[0] for i in ls)
sql3 = ') VALUES ('
sql4 = ','.join('%r' % i[1] for i in ls)
sql5 = ');'
print(sql1, sql2, sql3, sql4, sql5, sep='\n')
打印结果
INSERT student (
name,enrollment_date,age
) VALUES (
’小基’,‘2004-09-01’,12
);

2、知识补充

2.1、列表推导式

  • 语法:[ 表达式 for 元素 in 列表 if 条件 ]
  • 应用示例:矩阵转置
matrix = [[1, 2],
          [3, 4],
          [5, 6]]
inverse_matrix = [[matrix[r][c] for r in range(len(matrix))] for c in range(len(matrix[0]))]
print(inverse_matrix)
打印结果
[[1, 3, 5],
 [2, 4, 6]]

2.2、repr

表达式打印结果
print(repr(‘A’))‘A’
print(’%r’ % 9)9
print(’{!r}’.format([‘2’, 2]))[‘2’, 2]
  • repr和str区别
class A:
    def __init__(self, i):
        self.i = i
    def __str__(self):
        return repr(self.__dict__)

class B:
    def __init__(self, i):
        self.i = i
    def __repr__(self):
        return repr(self.__dict__)

print([A(i) for i in range(3)])
print([B(i) for i in range(3)])
打印结果
[对象, 对象, 对象]
[{‘i’: 0}, {‘i’: 1}, {‘i’: 2}]

3、备注

应用场景
爬虫数据写入数据库
优点:
通用性好,直接复制可用;简洁;
阅读扩展
字典写入数据库
生成update语句
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值