Python 单个页面连接 MySQL 数据库,进行增删改实例

学习笔记 马富天 2018-11-29 14:45:33 11 0

【摘要】本文给出一个完整的 python 单个页面处理 MySQL 数据库的完整实例。

二话不多说,直接给出完整代码:

  1. #!/usr/bin/python3
  2. # -*- coding: UTF-8 -*-
  3. import sys
  4. import pymysql
  5. import random
  6. """
  7.     数据库配置项
  8. """
  9. db_host     = "127.0.0.1" # 主机名
  10. db_username = "root"      # 数据库用户名
  11. db_password = "root"      # 数据库密码
  12. db_name     = "mafutian"  # 数据库名称
  13. db_port     = 3306        # 数据库端口号,必须整型
  14. db_charset  = "utf8"      # 连接字符集
  15. # 对于支持事务的数据库, 在 Python 数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
  16. # commit() 方法游标的所有更新操作,rollback() 方法回滚当前游标的所有操作。
  17. # MySQL 的存储引擎是 Innodb 才支持事务处理
  18. try:
  19.     conn = pymysql.connect(
  20.         host    = db_host, 
  21.         user    = db_username, 
  22.         passwd  = db_password, 
  23.         db      = db_name, 
  24.         port    = db_port, 
  25.         charset = db_charset
  26.     )
  27. except Exception as e:
  28.     # 发生异常,连接失败
  29.     print("数据库连接错误:",e)
  30.     # 退出整个程序。参数默认为0,表示正常退出,1表示异常退出
  31.     sys.exit(1)
  32. else:
  33.     print("数据库连接成功")
  34.     # 使用 cursor() 方法创建一个游标对象 cursor
  35.     cursor = conn.cursor() 
  36. '''
  37.     创建表
  38. '''
  39. sql = """
  40.     CREATE TABLE IF NOT EXISTS `mafutian`(
  41.         id INT AUTO_INCREMENT PRIMARY KEY,
  42.         name VARCHAR(30),
  43.         age INT,
  44.         summary VARCHAR(100)
  45.     );
  46. """
  47. # MySQL 对建表、删表语句不支持事务
  48. cursor.execute("DROP TABLE IF EXISTS `mafutian`")
  49. cursor.execute(sql)
  50. '''
  51.     插入数据
  52. '''
  53. # 注意此处的占位符全部是 %s 字符串类型,不区分字符串、整型、浮点型或者其它类型,且 %s 不加引号
  54. sql = 'INSERT INTO `mafutian`(name,age,summary) VALUES({})'.format(','.join(['%s'] * 3))
  55. values = [" mafutian ","18"," 中文 "]
  56. count = 0
  57. while (True):
  58.     if count > 1000:
  59.         break
  60.     else:
  61.         count += 1
  62.         age    = random.randint(10, 30)
  63.         values[1] = str(age)
  64.         # 对每个字段进行处理,将两边的空格去掉
  65.         values = list(map(lambda x: x.strip(), values))
  66.         try:
  67.             cursor.execute(sql, values)
  68.         except Exception as e:
  69.             # 若已执行 sql,但不提交事务,或者事务回滚,主键会自增加1,但会删除该条记录
  70.             # 回滚当前事务
  71.             conn.rollback()
  72.             count -= 1  # 计数器减1
  73.             print('事务处理失败',e)
  74.         else:
  75.             # 每达到 100 条时, sql 执行一次事务
  76.             if count % 100 == 0:
  77.                 # 提交当前事务
  78.                 conn.commit()
  79.                 print('提交事务',count)
  80. # 当未达到 100 整时,将剩下的 sql 提交事务,避免遗漏
  81. conn.commit()
  82. print('提交事务')
  83. '''
  84.     查询数据
  85. '''
  86. # 查询语句不需要提交事务
  87. sql = "select id,name,age,summary from mafutian"
  88. cursor.execute(sql)
  89. # 返回数据条数或影响行数
  90. tot = cursor.rowcount
  91. print("已查询到的总行数",tot)
  92. if tot > 0 :
  93.     # 返回的结果集是元组,元组的元素不能修改,元组使用小括号
  94.     # 取得结果集的下一行
  95.     row = cursor.fetchone() 
  96.     # (1, 'mafutian', 29, '中文')
  97.     print(row)
  98.     # 获取结果集的下三行
  99.     rows = cursor.fetchmany(3)
  100.     # ((2, 'mafutian', 14, '中文'), (3, 'mafutian', 20, '中文'), (4, 'mafutian', 29, '中文'))
  101.     print(rows)
  102.     # 返回结果集剩下的所有行
  103.     # id 从 5 开始,((5, 'mafutian', 16, '中文'),...)
  104.     result = cursor.fetchall()
  105.     for row in result:
  106.         id      = row[0]
  107.         name    = row[1]
  108.         age     = row[2]
  109.         summary = row[3]
  110.         print("id:",id," name:",name," age:",age," summary:",summary)
  111.         break
  112. else:
  113.     print("查询结果为空")
  114. '''
  115.     更新数据
  116. '''
  117. sql    = "UPDATE mafutian SET summary = %s WHERE id = %s "
  118. values = ['这是 python',10]
  119. try:
  120.     cursor.execute(sql,values)
  121. except Exception as e:
  122.     print('事务处理失败',e)
  123.     conn.rollback()
  124. else:
  125.     conn.commit()
  126. '''
  127.     删除数据
  128. '''
  129. # 这里依旧是 %s,不论字段类型是什么,都是采用 %s
  130. sql    = "DELETE FROM mafutian WHERE id > %s"
  131. values = [10]
  132. try:
  133.     cursor.execute(sql,values)
  134. except Exception as e:
  135.     print('事务处理失败',e)
  136.     conn.rollback()
  137. else:
  138.     conn.commit()
  139. cursor.close() # 关闭游标对象
  140. conn.close()   # 关闭连接

另外,给出简洁版本:

  1. #!/usr/bin/python3
  2. # -*- coding: UTF-8 -*-
  3. import sys
  4. import pymysql
  5. db_host     = "127.0.0.1"
  6. db_username = "root"
  7. db_password = "root"
  8. db_name     = "mafutian"
  9. db_port     = 3306
  10. db_charset  = "utf8"
  11. try:
  12.     conn = pymysql.connect(host = db_host, user = db_username, passwd = db_password, db = db_name, port = db_port, charset = db_charset)
  13. except Exception as e:
  14.     print("数据库连接错误:",e)
  15.     sys.exit(1)
  16. else:
  17.     cursor = conn.cursor() 
  18. sql = "select id,name1,age,summary from mafutian"
  19. try:
  20.     cursor.execute(sql)
  21. except Exception as e:
  22.     print("查询错误",e)
  23.     sys.exit(1)    
  24. tot = cursor.rowcount
  25. if tot > 0 :
  26.     result = cursor.fetchall()
  27.     for row in result:
  28.         print(row)
  29. else:
  30.     print("查询结果为空")
  31. cursor.close()
  32. conn.close()

不积跬步无以至千里,不积小流无以成江海。

版权归 马富天个人博客 所有

本文标题:《Python 单个页面连接 MySQL 数据库,进行增删改实例》

本文链接地址:http://www.mafutian.com/395.html

转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^

1

0

上一篇《 SQLite 的基本操作 》 下一篇《 mysql binlog 学习笔记 》

暂无评论

评论审核未开启
表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情 表情
验证码

TOP10

  • 浏览最多
  • 评论最多