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

2、删除

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

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

二、数据表操作

1、创建

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

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

2、删除

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

2-1、用mysql-connector-python库
import mysql.connector
# 数据库连接配置
config = {'user': 'root',  # 替换为你的MySQL用户名'password': '123456',  # 替换为你的MySQL密码'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database',  # 数据库名
}
try:# 连接到数据库cnx = mysql.connector.connect(**config)cursor = cnx.cursor()# 执行SQL语句来删除表drop_table_query = "DROP TABLE IF EXISTS myelsa_table;"cursor.execute(drop_table_query)# 提交更改(在这个例子中,删除表不需要显式提交,因为不是事务的一部分)# 但如果你之前做了其他更改,这里可以调用cnx.commit()print("Table myelsa_table deleted successfully!")
except mysql.connector.Error as err:print(f"Error: '{err}'")
finally:# 关闭游标和连接if cursor:cursor.close()if cnx.is_connected():cnx.close()
2-2、用PyMySQL库
import pymysql
# 数据库连接配置
config = {'user': 'root',  # 替换为你的MySQL用户名'password': '123456',  # 替换为你的MySQL密码'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database',  # 数据库名'charset': 'utf8mb4',  # 设置字符集,可选'cursorclass': pymysql.cursors.DictCursor  # 使用字典游标,可选
}
try:# 连接到数据库connection = pymysql.connect(**config)with connection.cursor() as cursor:# 执行SQL语句来删除表drop_table_query = "DROP TABLE IF EXISTS myelsa_table;"cursor.execute(drop_table_query)# 提交更改(在这个例子中,删除表不需要显式提交,因为不是事务的一部分)# 但如果你之前做了其他更改,并且它们是在一个事务中,这里可以调用 connection.commit()print("Table myelsa_table deleted successfully!")
except pymysql.MySQLError as err:print(f"Error: '{err}'")
finally:# 关闭连接if connection.open:connection.close()
2-3、用PeeWee库
# 注意,这里需要借助扩展库peewee-mysql,需提前安装
from peewee import *
# 数据库连接配置  
db = MySQLDatabase('test_database',user='root',password='123456',host='127.0.0.1'
)
try:# 连接到数据库  db.connect()# 创建一个用于执行原始 SQL 的游标  db.execute_sql("DROP TABLE IF EXISTS myelsa_table;")# Peewee 没有直接的“提交”操作,因为对于 DDL(数据定义语言)语句如 DROP TABLE,  # 它们通常是立即执行的,不需要事务提交。  print("Table myelsa_table deleted successfully!")
except peewee.OperationalError as e:print(f"Error: '{e}'")
finally:# 关闭数据库连接  db.close()
2-4、用SQLAlchemy库
from sqlalchemy import create_engine, MetaData, Table
# 数据库连接配置
config = {'user': 'root',  # 替换为你的MySQL用户名'password': '123456',  # 替换为你的MySQL密码'host': '127.0.0.1',  # 如果数据库在远程服务器上,请替换为相应的主机名或IP地址'database': 'test_database',  # 数据库名'dialect': 'mysql'  # 使用mysql方言
}
# 创建连接字符串
connection_string = f"{config['dialect']}+pymysql://{config['user']}:{config['password']}@{config['host']}/{config['database']}"
try:# 创建引擎engine = create_engine(connection_string)# 使用引擎连接到数据库with engine.connect() as conn:# 创建元数据对象metadata = MetaData()# 定义要删除的表(如果已知表结构,可以创建完整的 Table 对象)# 但为了简单地删除表,我们只需要表名table_name = 'myelsa_table'# 使用 SQLAlchemy 的反射机制来获取 Table 对象(如果需要)# 这里我们直接执行原始 SQL 语句来删除表# 执行SQL语句来删除表drop_table_query = f"DROP TABLE IF EXISTS {table_name};"conn.execute(drop_table_query)print("Table myelsa_table deleted successfully!")
except Exception as e:print(f"Error: '{e}'")# 在 with 语句结束后,连接会自动关闭,所以不需要显式关闭连接

三、推荐阅读

1、Python函数之旅

2、Python算法之旅

3、博客个人主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录Python低代码开发框架zdppy_amcrud的开发过程

实现新增接口 基础代码 import env import mcrud import api import snowflakeenv.load(".env") db mcrud.new_env()table "user" columns ["name", "age"]async def add_user(req):data await api.req.get_json(req)values [d…

SkyEye对接CANoe:助力汽车软件功能验证

01.简介 CANoe(CAN open environment)是德国Vector公司专为汽车总线设计而开发的一款通用开发环境,作为车载网络和ECU开发、测试和分析的专业工具,支持从需求分析到系统实现的整个系统的开发过程。CANoe丰富的功能和配置选项被OE…

虚拟ECU:彻底改变汽车软件开发与测试

汽车开发领域有着垂直性较强的一系列需求,其中最为瞩目的需求之一就是对安全高效的软件测试方法的需求。传统的汽车开发偏向使用硬件原型与真实ECU进行软件测试,但由于硬件设备往往在开发周期的中后阶段才生产完成,给汽车开发带来了成本与时间…

电商内卷时代,视频号小店凭借一己之力“脱颖而出”

大家好,我是电商笨笨熊 今年618各大电商平台花样百出; 某宝更是直接取消了“预售”,从5月就开始进入618预热期; 不少玩家既开心又难过,市场如此内卷,618确实是个爆发期,但更多的需要不断压低…

Star CCM+分配零部件至区域后交界面丢失-更新找回

前言 在工程应用中,将零部件分配至区域后,一般常规的操作需要对交界面进行检查。偶尔会发现交界面丢失。遇到此类问题,在没有做其他操作前(比如画网格),可以选择先删除所有区域在重新分配至区域。若已经进…

基于SSM的大学生兼职管理系统

基于SSM的大学生兼职管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 企业界面 前台学生界面 管理员界面 摘要 随着大学生兼职市场的日益繁…

K8s 高级调度

文章目录 K8s 高级调度CronJobinitContainerTaint 和 Toleration污点(Taint)容忍(Toleration) AffinityNodeAffinityPodAnffinity 和 PodAntiAffinity 总结 K8s 高级调度 CronJob 在 k8s 中周期性运行计划任务,与 li…

【vue echart】完成一个简单echart图表+自适应

实现效果&#xff1a; html&#xff1a; <divref"echartOne"id"echartOne"style"width: 100%; height: 100%" ></div> js: getEchartOne() {let chart this.$echarts.init(this.$refs.echartOne);chart.setOption({title: {text:…

云原生|为什么服务网格能够轻松重塑微服务?一文讲清楚!

目录 一、概述 二、 设计 三、服务网格 四、总结 一、概述 容器化技术与容器编排推动了微服务架构应用的演进&#xff0c;于是应用的扩展与微服务的数量日益增加&#xff0c;新的问题随之而来&#xff0c;监控服务的性能变得越来越困难&#xff0c;微服务与微服务之间相互通…

Kafka-集群管理者(Controller)选举机制、任期(epoch)机制

Kafka概述 Kafka-集群管理者&#xff08;Controller&#xff09;选举机制 Kafka中的Controller是Kafka集群中的一个特殊角色&#xff0c;负责对整个集群进行管理和协调。Controller的主要职责包括分区分配、副本管理、Leader选举等。当当前的Controller节点失效或需要进行重新…

嵌入式实时操作系统笔记1:RTOS入门_理解简单的OS系统

今日开始学习嵌入式实时操作系统RTOS&#xff1a;UCOS-III实时操作系统 本次目标是入门RTOS&#xff0c;理解多任务系统...... 本文只是个人学习笔记&#xff0c;基本都是对网上资料的整合...... 目录 STM32裸机与RTOS区别&#xff1a; 裸机中断示例&#xff1a; RTOS对优先级…

Spring MVC/Web

1.Spring MVC 的介绍 Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;也是Spring框架的一部分。它提供了灵活可扩展的MVC架构&#xff0c;方便开发者构建高性能的Web应用程序&#xff0c;并与 Spring 生态系统无缝集成。 2.MVC 设计模式 MVC&#xff08;Model…

设计模式—23种设计模式重点 表格梳理

设计模式的核心在于提供了相关的问题的解决方案&#xff0c;使得人们可以更加简单方便的复用成功的设计和体系结构。 按照设计模式的目的可以分为三大类。创建型模式与对象的创建有关&#xff1b;结构型模式处理类或对象的组合&#xff1b;行为型模式对类或对象怎样交互和怎样…

研发机构大数据迁移如何保障敏感数据不泄露

随着云计算和大数据技术的飞速进步&#xff0c;越来越多的企业正试图通过数据迁移来提升IT基础设施的效率&#xff0c;减少成本&#xff0c;并增强业务的灵活性。但是&#xff0c;这一过程并非没有它的挑战&#xff0c;尤其是在数据安全方面。数据在转移过程中可能会遭遇黑客攻…

解决深度确定问题:使用不相交集合森林

解决深度确定问题&#xff1a;使用不相交集合森林 引言不相交集合森林&#xff08;DSF&#xff09;基础按秩合并与路径压缩深度确定问题的解决方案实现MAKE-TREE修改FIND-SET实现FIND-DEPTH实现GRAFT分析最坏情况运行时间结论参考文献 引言 在计算机科学中&#xff0c;树结构是…

时空扭曲:重温相对论的终极挑战,探寻真理的脚步

大家都知道&#xff0c;相对论是爱因斯坦提出的划时代理论&#xff0c;为人类认知时空和引力做出了革命性贡献。但这个理论真的万无一失吗&#xff1f;近日&#xff0c;一项新研究提出了测试时间扭曲的新方法&#xff0c;或许能让我们重新审视相对论在宇宙大尺度上的适用性。 时…

HTML5好看的通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 模板菜单1 界面1.3 模板菜单2 界面1.4 模板菜单3 界面1.5 下拉菜单1 界面1.6 下拉菜单2 界面1.7 模板菜单4 界面1.8 模板菜单5 界面1.9 界面底部 2.效果和源码2.1 动态效果2.2 源码目录2.3 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址…

Python 造数据神器Faker

大家好&#xff0c;在编写代码过程中&#xff0c;我们经常需要一些假数据来进行测试或者演示。手动创建这些数据不仅耗时&#xff0c;而且容易出错。幸运的是&#xff0c;Python有一个非常有用的库叫做Faker&#xff0c;它可以生成各种类型的假数据&#xff0c;从名字、地址到公…

day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树

435.无重叠区间 思路 为了使区间尽可能的重叠所以排序来使区间尽量的重叠&#xff0c;使用左边界排序来统计重叠区间的个数与452. 用最少数量的箭引爆气球恰好相反。 代码 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…

如何在cPanel面板中开启盗链保护

本周有一个客户&#xff0c;购买Hostease的主机&#xff0c; 客户购买的是Linux虚拟主机&#xff0c;带cPanel面板的。询问我们的在线客服&#xff0c;如何可以防止他的网站上的图片不被盗用。cPanel的盗链保护功能可以帮助客户防止图片被盗链。 盗链&#xff08;Hotlinking&a…