【Python】PyMySQL 连接 MySQL数据库

红太狼 2023-02-18 08:00 70阅读 0赞

PyMySQL连接 Mysql

  • 安装 PyMySQL
  • PyMySQL 连接数据库
  • 创建数据库(数据库必须存在)
  • 创建数据表
  • 插入操作
  • 查询操作
  • 更新操作
  • 删除操作
  • 综合案例
  • Connection Object
  • Cursor Objects

两种方法进行数据库的连接分别是 PyMySQLmysql.connector,我们学习 PyMySQL

操作步骤:

  1. 连接数据库 conn = pymysql.connect()
  2. 生成游标对象 curosr = conn.cursor()
  3. 执行SQL语句 cursor.execute(sql)
  4. 关闭游标 cursor.close()
  5. 关闭连接 conn.closr()

PyMySQL 是在 Python3.4 以后版本中用于连接 MySQL 数据库的一个模块;

Python2 中则使用 mysqldb

安装 PyMySQL

首先要安装这个模块:

  1. pip install pymysql

检查一下是否安装成功:

  1. pip show pymysql

PyMySQL 连接数据库

  1. import pymysql
  2. # 创建数据库连接
  3. conn = pymysql.connect(
  4. host = '127.0.0.1', # 连接主机, 默认127.0.0.1
  5. user = 'root', # 用户名
  6. passwd = '1234',# 密码
  7. port = 3306, # 端口,默认为3306
  8. db = 'test', # 数据库名称
  9. charset = 'utf8' # 字符编码
  10. )
  11. # 生成游标对象 cursor
  12. cursor = conn.cursor()
  13. # 查询数据库版本
  14. cursor.execute("select version()") # 返回值是查询到的数据数量
  15. # 通过 fetchall方法获得数据
  16. data = cursor.fetchone()
  17. print("Database Version:%s" % data)
  18. cursor.close() # 关闭游标
  19. conn.close() # 关闭连接

创建数据库(数据库必须存在)

由于连接数据库时需要填要连接的数据库名,所以创建数据库只能做到:删除已经存在的数据库,再重新创建,相当于 清空数据库 的作用。

  1. # 创建数据库 test
  2. cursor.execute("drop database if exists test") #如果数据库已经存在,那么删除后重新创建
  3. sql = "create database test"
  4. cursor.execute(sql)

创建数据表

  1. # 创建数据表
  2. cursor.execute("drop table if exists employee") # 如果数据表已经存在,那么删除后重新创建
  3. sql = """ CREATE TABLE employee ( id VARCHAR(20) NOT NULL, name VARCHAR(20), age INT, income FLOAT ) """
  4. cursor.execute(sql)

插入操作

  1. # 数据库插入数据
  2. sql = "INSERT INTO employee VALUES ('1', '张三', 20, 5000)"
  3. try:
  4. cursor.execute(sql)
  5. # 提交当前游标的全部操作
  6. conn.commit()
  7. except:
  8. print("expection!")
  9. conn.rollback()
  10. # 查看更新后的结果
  11. sql = "SELECT* FROM employee"
  12. cursor.execute(sql)
  13. data = cursor.fetchall()
  14. print(data)

查询操作

只查询出一条数据:cursor.fetchone()

  1. sql = "SELECT* FROM employee"
  2. cursor.execute(sql) # 返回值是查询到的数据数量
  3. data = cursor.fetchone() # 查询一条数据
  4. print(data)

查询数据库中所有数据:cursor.fetchall()

  1. # 数据库查询数据
  2. sql = "SELECT * FROM employee"
  3. cursor.execute(sql) # 返回值是查询到的数据数量
  4. data = cursor.fetchall() # 查询一条数据
  5. print(data)

查询指定条件的数据:查询满足条件 income > 5000 的数据。

  1. # 查询指定条件的数据
  2. sql = " SELECT * FROM employee WHERE income > '%d' " % (5000)
  3. cursor.execute(sql) # 返回值是查询到的数据数量
  4. data = cursor.fetchone()
  5. print(data)

更新操作

  1. # 更新数据库
  2. sql = " UPDATE employee SET age = age + 1 WHERE age < '%d' " % (25)
  3. try:
  4. cursor.execute(sql)
  5. conn.commit()
  6. except:
  7. print("expection!")
  8. conn.rollback()
  9. # 查看更新后的结果
  10. sql = "SELECT* FROM employee"
  11. cursor.execute(sql)
  12. data = cursor.fetchall()
  13. print(data)

删除操作

  1. # 删除数据
  2. sql = "DELETE FROM employee WHERE age > '%d' " % (30)
  3. try:
  4. cursor.execute(sql)
  5. conn.commit()
  6. except:
  7. print("exce[tion!")
  8. conn.rollback()
  9. #查看更新后的结果
  10. sql = "select * from employee"
  11. cursor.execute(sql)
  12. data = cursor.fetchone()
  13. print(data)

综合案例

保证数据库中有 test 表:

  1. import pymysql
  2. import traceback
  3. from time import sleep
  4. class PyMySQL(object):
  5. create_table = """ CREATE TABLE stu ( id INT not null PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, age INT, sex VARCHAR(255) ) DEFAULT CHARSET = utf8 """
  6. select = 'SELECT * FROM stu'
  7. update = 'UPDATE stu SET name = "明明" WHERE id=2'
  8. delete = 'DELETE FROM stu WHERE id=9'
  9. insert = 'INSERT INTO stu(name, age, sex) VALUES("%s", "%d", "%s")' % ('小明', 2, "男")
  10. def __init__(self, host, user, pwd, db):
  11. self.conn = pymysql.connect(host, user, pwd, db)
  12. self.cursor = self.conn.cursor()
  13. print("数据库连接成功!")
  14. def closeAll(self):
  15. self.conn.close()
  16. self.cursor.close()
  17. print("资源释放完毕!")
  18. def create_table_func(self):
  19. self.cursor.execute("DROP TABLE IF EXISTS stu")
  20. self.cursor.execute(PyMySQL.create_table)
  21. print('数据表创建完毕')
  22. def insert_date(self):
  23. try:
  24. self.cursor.execute(PyMySQL.insert)
  25. self.conn.commit()
  26. print("数据插入成功!")
  27. except:
  28. print(traceback.format_exc())
  29. self.conn.rollback()
  30. print("数据插入失败!")
  31. def update_data(self):
  32. try:
  33. self.cursor.execute(PyMySQL.update)
  34. self.conn.commit()
  35. print("数据更新成功!")
  36. except:
  37. print(traceback.format_exc())
  38. self.conn.rollback()
  39. print("数据更新失败!")
  40. def delete_data(self):
  41. try:
  42. self.cursor.execute(PyMySQL.delete)
  43. self.conn.commit()
  44. print("数据删除成功!")
  45. except:
  46. print(traceback.format_exc())
  47. self.conn.rollback()
  48. print("数据删除失败!")
  49. def select_data(self):
  50. self.cursor.execute(PyMySQL.select)
  51. all_data = self.cursor.fetchall()
  52. for i in all_data:
  53. print('查询结果为:{}'.format(i))
  54. if __name__ == '__main__':
  55. my = PyMySQL('localhost','root','1234','test')
  56. my.create_table_func()
  57. my.insert_date()
  58. my.update_data()
  59. my.delete_data()
  60. my.select_data()
  61. my.closeAll()

Connection Object

Connection 类提供以下方法:

  1. .close()
    从这一点开始,连接将不可用;如果试图对连接执行任何操作,将会引发错误(或子类)异常
  2. .commit()
    将操作提交到数据库;
    如果数据库支持自动提交特性,则必须首先关闭此功能;
    可以提供一个接口方法将其重新打开;
  3. .cursor()
    创建游标,用于执行 SQL 语句
  4. .rollback()
    此方法是可选的,因为并非所有数据库都提供事务支持;
    如果数据库确实提供事务,此方法将导致数据库回滚到任何挂起事务的开始;
    在不首先提交更改的情况下关闭连接将导致执行隐式回滚;

Cursor Objects

游标对象具有以下常用方法

  1. .close()
    关闭游标对象,从这一点开始,游标对象将不可用;
    如果试图使用游标执行任何操作,将引发错误(或子类)异常。
  2. .execute()
    执行数据库操作(查询或命令等SQL语句);
    返回值没有定义。
  3. .fetchone()
    获取查询结果的下一行,返回单个序列,或者在没有更多数据可用时返回 None
    如果 execute() 的调用没有生成任何结果,或者还没有执行,则会引发错误(或子类)异常。
  4. .fetchall()
    获取查询结果的所有(剩余)行,以序列的形式返回它们(例如元组列表)
    如果前面对 .execute() 的调用没有生成任何结果集,或者还没有发出调用,则会引发错误(或子类)异常。

发表评论

表情:
评论列表 (有 0 条评论,70人围观)

还没有评论,来说两句吧...

相关阅读