当前位置:   article > 正文

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

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

目录

一、数据库操作

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:123456@127.0.0.1/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、博客个人主页

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/636631
推荐阅读
相关标签
  

闽ICP备14008679号