鱼C论坛

 找回密码
 立即注册
查看: 1945|回复: 5

[已解决]python操作数据库写入数据的sql语句问题

[复制链接]
发表于 2019-7-18 10:33:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. def writeSql(a,b,c):
  2.    
  3.     sql = "INSERT INTO movies(a,b,c) values(%s,%s,%s)"
复制代码


现在要把函数传来的参数的值写入数据库,这个sql语句该怎么写
最佳答案
2019-7-18 11:24:40
基本思路我给你捋一下,要将数据插入到mysql数据库,可以使用下面的步骤
1、连接到数据库,获取到游标
2、写好insert插入操作的sql语句
3、使用游标执行insert的sql语句
4、提交操作
另外,插入操作有可能因为某些原因会失败(磁盘满了,网络断了等等。。。),需要做异常处理,如果插入过程中有失败,那么回滚,本次操作无效。

现在我假定你的数据库名是demo,表名是movies。表的字段包括三个avalue,bvalue,cvalue(你写出的是a,b,c,为了避免你理解混了,我给改了)。
用户名user,密码123456,host是127.0.0.1(本机)。要插入的值是函数传入的参数值a,b,c。

代码如下供你参考:

  1. import pymysql


  2. def writeSql(a, b, c):
  3.     sql = "INSERT INTO movies(avalue,bvalue,cvalue) values (%s,%s,%s)"
  4.     # 连接数据库
  5.     db = pymysql.connect(host='127.0.0.1', database='demo', user='user', password='123456',
  6.                          port=3306, charset='utf8')
  7.     # 获取游标
  8.     cursor = db.cursor()
  9.     try:
  10.         # 用游标来执行sql语句
  11.         cursor.execute(sql, (a, b, c))
  12.         # 提交操作
  13.         db.commit()
  14.     except Exception as e:
  15.         print(e)
  16.         # 如果插入过程中有异常,就回滚
  17.         db.rollback()
复制代码


好了,我相信你仔细看看应该能明白的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-18 11:24:40 | 显示全部楼层    本楼为最佳答案   
基本思路我给你捋一下,要将数据插入到mysql数据库,可以使用下面的步骤
1、连接到数据库,获取到游标
2、写好insert插入操作的sql语句
3、使用游标执行insert的sql语句
4、提交操作
另外,插入操作有可能因为某些原因会失败(磁盘满了,网络断了等等。。。),需要做异常处理,如果插入过程中有失败,那么回滚,本次操作无效。

现在我假定你的数据库名是demo,表名是movies。表的字段包括三个avalue,bvalue,cvalue(你写出的是a,b,c,为了避免你理解混了,我给改了)。
用户名user,密码123456,host是127.0.0.1(本机)。要插入的值是函数传入的参数值a,b,c。

代码如下供你参考:

  1. import pymysql


  2. def writeSql(a, b, c):
  3.     sql = "INSERT INTO movies(avalue,bvalue,cvalue) values (%s,%s,%s)"
  4.     # 连接数据库
  5.     db = pymysql.connect(host='127.0.0.1', database='demo', user='user', password='123456',
  6.                          port=3306, charset='utf8')
  7.     # 获取游标
  8.     cursor = db.cursor()
  9.     try:
  10.         # 用游标来执行sql语句
  11.         cursor.execute(sql, (a, b, c))
  12.         # 提交操作
  13.         db.commit()
  14.     except Exception as e:
  15.         print(e)
  16.         # 如果插入过程中有异常,就回滚
  17.         db.rollback()
复制代码


好了,我相信你仔细看看应该能明白的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 11:37:52 | 显示全部楼层
基础版本
  1. import pymysql

  2. id = '20120001'
  3. user = 'Bob'
  4. age = 20

  5. db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
  6. cursor = db.cursor()
  7. sql = 'INSERT INTO students(id, name, age) values(%s, %s, %s)'
  8. try:
  9.     cursor.execute(sql, (id, user, age))
  10.     db.commit()
  11. except:
  12.     db.rollback()
  13. db.close()
复制代码

进阶动态插入版本
  1. data = {
  2.     'id': '20120001',
  3.     'name': 'Bob',
  4.     'age': 20
  5. }
  6. table = 'students'
  7. keys = ', '.join(data.keys())
  8. values = ', '.join(['%s'] * len(data))
  9. sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
  10. try:
  11.    if cursor.execute(sql, tuple(data.values())):
  12.        print('Successful')
  13.        db.commit()
  14. except:
  15.     print('Failed')
  16.     db.rollback()
  17. db.close()
复制代码

高级动态插入&更新重复版本
  1. data = {
  2.     'id': '20120001',
  3.     'name': 'Bob',
  4.     'age': 21
  5. }

  6. table = 'students'
  7. keys = ', '.join(data.keys())
  8. values = ', '.join(['%s'] * len(data))

  9. sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(table=table, keys=keys, values=values)
  10. update = ','.join([" {key} = %s".format(key=key) for key in data])
  11. sql += update
  12. try:
  13.     if cursor.execute(sql, tuple(data.values())*2):
  14.         print('Successful')
  15.         db.commit()
  16. except:
  17.     print('Failed')
  18.     db.rollback()
  19. db.close()
复制代码


数据来源:静觅 崔庆才的个人博客 python3网络爬虫开发实战 5.2.1-mysql存储
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-7-18 11:39:56 | 显示全部楼层
空青 发表于 2019-7-18 11:24
基本思路我给你捋一下,要将数据插入到mysql数据库,可以使用下面的步骤
1、连接到数据库,获取到游标
2 ...

感谢,我猜你也是爬取猫眼top100吧,好熟悉的数据库表名
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 12:11:51 | 显示全部楼层
happy_study 发表于 2019-7-18 11:39
感谢,我猜你也是爬取猫眼top100吧,好熟悉的数据库表名

哈哈,我爬虫入门的时候搞的是豆瓣top100
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-18 13:11:34 | 显示全部楼层
感谢,学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-6 08:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表