Python爬虫存储数据 -MySQL删改查数据

253 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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()

image.png 我们不再使用原来的变量赋值了,主需要传一个列表,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')

image.png OK 结束 打完收工