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

文章目录

  • 1、示例
    • 1.1、完整代码
    • 1.2、过程拆解
  • 2、知识补充
    • 2.1、列表推导式
    • 2.2、repr
  • 3、备注

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语句

你可能感兴趣的:(Python数据库编程)