首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Python筑基之旅-MySQL数据库(三)

  • 25-03-03 04:23
  • 2484
  • 9124
blog.csdn.net

目录

一、数据库操作

1、创建

1-1、用mysql-connector-python库

1-2、用PyMySQL库

1-3、用PeeWee库

1-4、用SQLAlchemy库

2、删除

2-1、用mysql-connector-python库

2-2、用PyMySQL库

2-3、用PeeWee库

2-4、用SQLAlchemy库

二、数据表操作

1、创建

1-1、用mysql-connector-python库

1-2、用PyMySQL库

1-3、用PeeWee库

1-4、用SQLAlchemy库

2、删除

2-1、用mysql-connector-python库

2-2、用PyMySQL库

2-3、用PeeWee库

2-4、用SQLAlchemy库

三、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页

一、数据库操作

1、创建

        现需在MySQL服务器上新建数据库test_database;同时,在新建的数据库test_database中创建数据表test_table。不管是数据库,还是数据表,若不存在,则新建。

1-1、用mysql-connector-python库
  1. import mysql.connector
  2. # 配置数据库连接信息
  3. config = {
  4. 'user': 'root',
  5. 'password': '123456', # 在此输入你的MySQL密码,请自行修改
  6. 'host': '127.0.0.1',
  7. 'database': 'mysql' # 如果要指定数据库
  8. }
  9. # 连接到MySQL服务器
  10. try:
  11. cnx = mysql.connector.connect(**config)
  12. cursor = cnx.cursor()
  13. # 创建新数据库test_database(如果不存在)
  14. create_db_query = "CREATE DATABASE IF NOT EXISTS test_database"
  15. cursor.execute(create_db_query)
  16. # 切换到新数据库
  17. use_db_query = "USE test_database"
  18. cursor.execute(use_db_query)
  19. # 创建新表test_table(如果不存在)
  20. # 假设我们有一个简单的表,包含 id(整数,主键,自增)、name(字符串)和 age(整数)
  21. create_table_query = """
  22. CREATE TABLE IF NOT EXISTS test_table (
  23. id INT AUTO_INCREMENT PRIMARY KEY,
  24. name VARCHAR(255) NOT NULL,
  25. age INT
  26. )
  27. """
  28. cursor.execute(create_table_query)
  29. # 提交事务
  30. cnx.commit()
  31. except mysql.connector.Error as err:
  32. print(f"Error: {err}")
  33. if cnx.is_connected():
  34. cnx.rollback() # 如果需要回滚事务的话
  35. finally:
  36. # 关闭游标和连接
  37. if cursor:
  38. cursor.close()
  39. if cnx.is_connected():
  40. cnx.close()
1-2、用PyMySQL库
  1. import pymysql
  2. # 配置数据库连接信息
  3. config = {
  4. 'user': 'root',
  5. 'password': '123456', # 在此输入你的MySQL密码,请自行修改
  6. 'host': '127.0.0.1',
  7. 'database': 'mysql' # 如果要指定数据库,但这里我们稍后会创建新数据库
  8. }
  9. # 连接到MySQL服务器
  10. try:
  11. # 注意:PyMySQL没有直接使用**config的方式,需要分别传入参数
  12. cnx = pymysql.connect(host=config['host'],
  13. user=config['user'],
  14. password=config['password'],
  15. charset='utf8mb4', # 可选,添加字符集支持
  16. cursorclass=pymysql.cursors.DictCursor) # 使用字典游标
  17. # 创建新数据库test_database(如果不存在)
  18. with cnx.cursor() as cursor:
  19. create_db_query = "CREATE DATABASE IF NOT EXISTS test_database"
  20. cursor.execute(create_db_query)
  21. # 切换到新数据库
  22. # 注意:PyMySQL没有直接的USE语句,我们需要断开连接并重新连接到新数据库
  23. cnx.close()
  24. config['database'] = 'test_database'
  25. cnx = pymysql.connect(**config, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
  26. # 创建新表test_table(如果不存在)
  27. # 假设我们有一个简单的表,包含 id(整数,主键,自增)、name(字符串)和 age(整数)
  28. with cnx.cursor() as cursor:
  29. create_table_query = """
  30. CREATE TABLE IF NOT EXISTS test_table (
  31. id INT AUTO_INCREMENT PRIMARY KEY,
  32. name VARCHAR(255) NOT NULL,
  33. age INT
  34. )
  35. """
  36. cursor.execute(create_table_query)
  37. # 提交事务
  38. cnx.commit()
  39. except pymysql.MySQLError as err:
  40. print(f"Error: {err}")
  41. if cnx:
  42. cnx.rollback() # 如果需要回滚事务的话(但对于DDL语句,通常没有回滚的必要)
  43. finally:
  44. # 关闭游标和连接
  45. if cnx:
  46. cnx.close()
1-3、用PeeWee库
  1. from peewee import *
  2. # 配置数据库连接信息,这里尝试连接到名为'mysql'的数据库
  3. db = MySQLDatabase('mysql', user='root', password='123456', host='127.0.0.1')
  4. # 尝试连接数据库
  5. try:
  6. db.connect()
  7. # 创建新数据库test_database(如果不存在),这里通过执行原始SQL语句来实现
  8. db.execute_sql("CREATE DATABASE IF NOT EXISTS test_database")
  9. # 更改数据库连接对象以连接到新创建的数据库(或已存在的)
  10. db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
  11. db.connect()
  12. # 定义模型(对应于数据库表)
  13. class TestTable(Model):
  14. id = AutoField() # 自增主键
  15. name = CharField(null=False) # 字符字段,不能为空
  16. age = IntegerField(null=True) # 整数字段,可以为空
  17. class Meta:
  18. database = db # 指定该模型使用的数据库连接
  19. # 自定义的创建表方法,这里实际上是覆盖了基类Model的create_table方法
  20. # 但实际上这里不需要重新定义,因为Peewee会自动在调用create_table时处理提交事务
  21. def create_table(cls, fail_silently=False, **options):
  22. super(TestTable, cls).create_table(fail_silently, **options)
  23. db.commit() # 这里提交事务其实是不必要的,因为Peewee默认会处理
  24. # 调用自定义的create_table方法来创建表(如果不存在)
  25. # 但通常我们会直接调用 TestTable.create_table() 而无需修改它
  26. TestTable.create_table()
  27. except Exception as e:
  28. print(f"Error: {e}")
  29. # 如果连接已关闭,这里的关闭操作是多余的,因为db.close()在连接关闭时不会引发错误
  30. if db.is_closed():
  31. db.close() # 实际上,这里的检查是多余的,因为db在异常发生前应该是打开的
  32. else:
  33. db.rollback() # 如果有事务在执行并且需要回滚的话(但在这个场景中,通常没有显式开启的事务)
  34. finally:
  35. # 无论是否发生异常,都要确保数据库连接被关闭
  36. if not db.is_closed():
  37. db.close()
1-4、用SQLAlchemy库
略,该库本身不支持直接创建数据库,需要借助其他第三方库,如PyMySQL

2、删除

        现需在MySQL服务器上删除已有数据库test_database,以下为借助第三方库实现:

2-1、用mysql-connector-python库
  1. import mysql.connector
  2. # MySQL服务器连接参数
  3. config = {
  4. 'user': 'root',
  5. 'password': '123456', # 在此输入你的MySQL密码,请自行修改
  6. 'host': '127.0.0.1',
  7. 'database': 'mysql' # 如果要指定数据库
  8. }
  9. # 连接到MySQL服务器
  10. try:
  11. connection = mysql.connector.connect(**config)
  12. cursor = connection.cursor()
  13. # 执行SQL语句来删除test_database数据库
  14. sql = "DROP DATABASE IF EXISTS test_database"
  15. cursor.execute(sql)
  16. # 提交事务
  17. connection.commit()
  18. print("Database test_database deleted successfully.")
  19. except mysql.connector.Error as error:
  20. print(f"Error: '{error}'")
  21. finally:
  22. # 关闭游标和连接
  23. if connection.is_connected():
  24. cursor.close()
  25. connection.close()
2-2、用PyMySQL库
  1. import pymysql
  2. # MySQL服务器连接参数
  3. config = {
  4. 'user': 'root', # 替换为你的MySQL用户名
  5. 'password': '123456', # 替换为你的MySQL密码
  6. 'host': '127.0.0.1', # 替换为你的MySQL服务器地址
  7. 'port': 3306, # 如果你的MySQL不是默认端口,需要指定
  8. 'charset': 'utf8mb4', # 设置字符集
  9. 'cursorclass': pymysql.cursors.DictCursor # 使用字典游标,这不是必需的
  10. }
  11. # 连接到MySQL服务器(注意这里我们没有指定database参数)
  12. try:
  13. # 因为我们要删除数据库,所以不需要连接到特定的数据库
  14. connection = pymysql.connect(**{k: v for k, v in config.items() if k != 'database'})
  15. with connection.cursor() as cursor:
  16. # 执行SQL语句来删除test_database数据库
  17. sql = "DROP DATABASE IF EXISTS test_database"
  18. cursor.execute(sql)
  19. # 提交事务,可省略
  20. connection.commit()
  21. print("Database test_database deleted successfully.")
  22. except pymysql.MySQLError as error:
  23. print(f"Error: '{error}'")
  24. finally:
  25. # 关闭连接
  26. if connection:
  27. connection.close()
2-3、用PeeWee库
略,该库本身不支持直接删除数据库,需要借助其他第三方库,如PyMySQL
2-4、用SQLAlchemy库
略,该库本身不支持直接删除数据库,需要借助其他第三方库,如PyMySQL

二、数据表操作

1、创建

        在MySQL服务器上已有数据库test_database,需在该数据库中创建数据表myelsa_table,以下为借助第三方库实现:

1-1、用mysql-connector-python库
  1. import mysql.connector
  2. # 数据库连接配置
  3. config = {
  4. 'user': 'root', # 替换为你的MySQL用户名
  5. 'password': '123456', # 替换为你的MySQL密码
  6. 'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
  7. 'database': 'test_database', # 数据库名
  8. 'raise_on_warnings': True
  9. }
  10. # 连接到数据库
  11. cnx = mysql.connector.connect(**config)
  12. cursor = cnx.cursor()
  13. # 创建数据表的SQL语句
  14. create_table_query = """
  15. CREATE TABLE IF NOT EXISTS myelsa_table (
  16. name VARCHAR(255) NOT NULL,
  17. ID_Card VARCHAR(255) NOT NULL,
  18. age INT NOT NULL,
  19. city VARCHAR(255) NOT NULL,
  20. PRIMARY KEY (ID_Card) -- 如果ID_Card字段是唯一的,可以设为主键,否则可以移除这行
  21. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  22. """
  23. # 执行SQL语句
  24. cursor.execute(create_table_query)
  25. # 提交更改(如果使用了事务)
  26. cnx.commit()
  27. # 关闭连接
  28. cursor.close()
  29. cnx.close()
  30. print("Table myelsa_table created successfully!")
1-2、用PyMySQL库
  1. import pymysql
  2. # 数据库连接配置
  3. config = {
  4. 'user': 'root', # 替换为你的MySQL用户名
  5. 'password': '123456', # 替换为你的MySQL密码
  6. 'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
  7. 'database': 'test_database', # 数据库名
  8. 'charset': 'utf8mb4', # 字符集设置
  9. 'cursorclass': pymysql.cursors.DictCursor # 使用字典游标
  10. }
  11. # 连接到数据库
  12. connection = pymysql.connect(**config)
  13. try:
  14. with connection.cursor() as cursor:
  15. # 创建数据表的SQL语句
  16. create_table_query = """
  17. CREATE TABLE IF NOT EXISTS myelsa_table (
  18. name VARCHAR(255) NOT NULL,
  19. ID_Card VARCHAR(255) NOT NULL,
  20. age INT NOT NULL,
  21. city VARCHAR(255) NOT NULL,
  22. PRIMARY KEY (ID_Card) -- 如果ID_Card字段是唯一的,可以设为主键
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  24. """
  25. # 执行SQL语句
  26. cursor.execute(create_table_query)
  27. # 提交更改(对于自动提交模式,这一步可能不是必须的)
  28. connection.commit()
  29. finally:
  30. connection.close()
  31. print("Table myelsa_table created successfully!")
1-3、用PeeWee库
  1. from peewee import *
  2. # 数据库连接配置
  3. db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
  4. # 定义模型
  5. class MyElsaTable(Model):
  6. name = CharField(max_length=255, null=False)
  7. ID_Card = CharField(max_length=255, unique=True) # 假设ID_Card是唯一的
  8. age = IntegerField(null=False)
  9. city = CharField(max_length=255, null=False)
  10. class Meta:
  11. database = db
  12. # 连接到数据库
  13. db.connect()
  14. # 创建表(如果表不存在)
  15. db.create_tables([MyElsaTable])
  16. # 关闭数据库连接(在 Peewee 中,通常不需要显式关闭连接,因为它会自动管理连接池)
  17. db.close()
  18. print("Table myelsa_table created successfully!")
1-4、用SQLAlchemy库
  1. from sqlalchemy import create_engine, Column, Integer, String, MetaData
  2. from sqlalchemy.ext.declarative import declarative_base
  3. from sqlalchemy.orm import sessionmaker
  4. # 数据库连接配置(使用 SQLAlchemy 的 URI 格式)
  5. DATABASE_URI = 'mysql+pymysql://root:[email protected]/test_database?charset=utf8mb4'
  6. # 创建一个引擎实例
  7. engine = create_engine(DATABASE_URI, echo=True) # echo=True 用于显示生成的 SQL 语句,调试时可以打开
  8. # 创建基类
  9. Base = declarative_base()
  10. # 定义模型类
  11. class MyElsaTable(Base):
  12. __tablename__ = 'myelsa_table'
  13. name = Column(String(255), nullable=False)
  14. ID_Card = Column(String(255), primary_key=True) # 设置为主键
  15. age = Column(Integer, nullable=False)
  16. city = Column(String(255), nullable=False)
  17. # 创建表(如果表不存在)
  18. Base.metadata.create_all(engine)
  19. # 如果你想要使用 ORM 来进行操作,可以创建一个 session 类
  20. Session = sessionmaker(bind=engine)
  21. session = Session()
  22. # 这里不需要执行 SQL 语句或提交更改,因为 create_all 方法会自动处理
  23. # 关闭 session(如果需要的话,但在这种情况下我们并没有进行任何 ORM 操作)
  24. # session.close()
  25. print("Table myelsa_table created successfully!")

2、删除

        在MySQL服务器上已有数据库test_database,且该数据库下已有数据表myelsa_table,现需删除数据表myelsa_table,以下为借助第三方库实现:

2-1、用mysql-connector-python库
  1. import mysql.connector
  2. # 数据库连接配置
  3. config = {
  4. 'user': 'root', # 替换为你的MySQL用户名
  5. 'password': '123456', # 替换为你的MySQL密码
  6. 'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
  7. 'database': 'test_database', # 数据库名
  8. }
  9. try:
  10. # 连接到数据库
  11. cnx = mysql.connector.connect(**config)
  12. cursor = cnx.cursor()
  13. # 执行SQL语句来删除表
  14. drop_table_query = "DROP TABLE IF EXISTS myelsa_table;"
  15. cursor.execute(drop_table_query)
  16. # 提交更改(在这个例子中,删除表不需要显式提交,因为不是事务的一部分)
  17. # 但如果你之前做了其他更改,这里可以调用
  18. cnx.commit()
  19. print("Table myelsa_table deleted successfully!")
  20. except mysql.connector.Error as err:
  21. print(f"Error: '{err}'")
  22. finally:
  23. # 关闭游标和连接
  24. if cursor:
  25. cursor.close()
  26. if cnx.is_connected():
  27. cnx.close()
2-2、用PyMySQL库
  1. import pymysql
  2. # 数据库连接配置
  3. config = {
  4. 'user': 'root', # 替换为你的MySQL用户名
  5. 'password': '123456', # 替换为你的MySQL密码
  6. 'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
  7. 'database': 'test_database', # 数据库名
  8. 'charset': 'utf8mb4', # 设置字符集,可选
  9. 'cursorclass': pymysql.cursors.DictCursor # 使用字典游标,可选
  10. }
  11. try:
  12. # 连接到数据库
  13. connection = pymysql.connect(**config)
  14. with connection.cursor() as cursor:
  15. # 执行SQL语句来删除表
  16. drop_table_query = "DROP TABLE IF EXISTS myelsa_table;"
  17. cursor.execute(drop_table_query)
  18. # 提交更改(在这个例子中,删除表不需要显式提交,因为不是事务的一部分)
  19. # 但如果你之前做了其他更改,并且它们是在一个事务中,这里可以调用 connection.commit()
  20. print("Table myelsa_table deleted successfully!")
  21. except pymysql.MySQLError as err:
  22. print(f"Error: '{err}'")
  23. finally:
  24. # 关闭连接
  25. if connection.open:
  26. connection.close()
2-3、用PeeWee库
  1. from peewee import *
  2. # 数据库连接配置
  3. db = MySQLDatabase('test_database', user='root', password='123456', host='127.0.0.1')
  4. # 尝试连接到数据库
  5. try:
  6. db.connect()
  7. # 定义一个模型,即使我们不使用它来进行数据操作,也需要它来引用表
  8. class MyElsaTable(Model):
  9. class Meta:
  10. database = db
  11. table_name = 'myelsa_table' # 如果表名与模型名不同,可以指定
  12. # 执行SQL语句来删除表
  13. # 注意:Peewee没有直接提供删除表的API,但我们可以通过执行原始SQL来实现
  14. db.execute_sql("DROP TABLE IF EXISTS `myelsa_table`;")
  15. print("Table myelsa_table deleted successfully!")
  16. except Exception as e:
  17. print(f"Error: {e}")
  18. finally:
  19. # 关闭数据库连接(Peewee会在析构时自动关闭连接,但显式关闭是个好习惯)
  20. db.close()
2-4、用SQLAlchemy库
  1. from sqlalchemy import create_engine, MetaData, Table
  2. # 数据库连接配置
  3. config = {
  4. 'user': 'root', # 替换为你的MySQL用户名
  5. 'password': '123456', # 替换为你的MySQL密码
  6. 'host': '127.0.0.1', # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址
  7. 'database': 'test_database', # 数据库名
  8. 'port': 3306, # 如果你的MySQL服务不在默认端口上,请指定端口
  9. }
  10. # 创建数据库引擎
  11. engine = create_engine(f'mysql+pymysql://{config["user"]}:{config["password"]}'
  12. f'@{config["host"]}:{config["port"]}/{config["database"]}')
  13. # 连接到数据库(SQLAlchemy会自动处理连接)
  14. # 定义元数据对象
  15. metadata = MetaData()
  16. # 定义要删除的表(不需要定义列,因为我们只是删除它)
  17. myelsa_table = Table('myelsa_table', metadata, autoload_with=engine)
  18. try:
  19. # 删除表(如果存在)
  20. myelsa_table.drop(engine)
  21. print("Table myelsa_table deleted successfully!")
  22. except Exception as e:
  23. print(f"Error: {e}")
  24. # SQLAlchemy会自动管理连接,你通常不需要显式关闭它
  25. # 但如果你需要确保所有资源都被释放,可以调用dispose()方法
  26. engine.dispose()

三、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页

遨游码海,我心飞扬
微信名片
注:本文转载自blog.csdn.net的神奇夜光杯的文章"https://myelsa1024.blog.csdn.net/article/details/139168320"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top