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