一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情。 昨天实现了利用Python去向MySQL中增加数据,但是很笨的添加,不能动态,都是写死的,今天更新一下昨天方法,然后继续MySQL的其他功能使用.
MySQL的增 加强版
MySQL基础增加,昨天已经实现,但是如果我们的数据多了一项,那么我们的代码就得重新写了,这个问题怎么解决呢?使用列表动态的拼接:
data = {
'id': '20220405',
'name': 'Flora',
'age': 18,
}
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['% s'] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
try:
if cursor.execute(sql, tuple(data.values())):
print('Successful')
db.commit()
except:
print('Failed')
db.rollback()
db.close()
我们不再使用原来的变量赋值了,主需要传一个列表,key就是我们数据库里面的记录的列名,value就是记录里的value,这样就省去了要修改SQL语句的烦恼.其实核心理念依然是字符串拼接SQL.
MySQL 改 更新数据
如上面所说最简单还是直接写好SQL去执行举个例子:
sql = 'UPDATE students SET age = % s WHERE name = % s'
try:
cursor.execute(sql, (33, 'flynt'))
db.commit()
except:
db.rollback()
db.close()
很明显,这个挺笨的,我们可以修改一下
data = {
'id': '20220405',
'name': 'flynt',
'age': 21
}
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['% s'] * len(data))
sql = 'INSERT INTO {table} ({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(table=table, keys=keys, values=values)
update = ','.join(["{key} = % ss".format(key=key) for key in data])
sql += " "+update
cursor = db.cursor()
try:
if cursor.execute(sql, tuple(data.values())*2):
print('Successful')
db.commit()
except:
print('Failed')
db.rollback()
db.close()
主键存在就改,不存在就插入
MySQL 删除记录
table = 'students'
condition = 'age > 20'
sql = 'DELETE FROM {table} WHERE {condition}'.format(table=table, condition=condition)
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
没什么好说的就是拼写SQL然后去执行.
MySQL 查询数据
sql = 'SELECT * FROM students WHERE age >= 20'
try:
cursor.execute(sql)
print('Count:', cursor.rowcount)
one = cursor.fetchone()
print('One:', one)
results = cursor.fetchall()
print('Results:', results)
print('Results Type:', type(results))
for row in results:
print(row)
except:
print('Error')
OK 结束 打完收工