数据库操作
pip3安装mysql依赖
pip3 list|grep mysql
pip3 install mysql-connector-python
#指定版本
pip3 install mysql-connector-python==版本号
#升降版本
pip3 install --upgrade mysql-connector-python==版本号
原生SQL操作
操作mysql可以使用pymsql或mysql-connector-python等
- 数据库驱动类型:
pymysql
是纯Python实现的MySQL客户端库,而mysql-connector-python
是MySQL官方提供的官方驱动程序,是用C实现的。 - 兼容性和特性:
mysql-connector-python
官方驱动程序对MySQL数据库的兼容性更好,并支持一些高级特性,如事务、数据库迁移工具等。而pymysql
在兼容性方面也很好,但可能会有一些限制,特别是在某些特定的高级功能方面。 - 性能: 由于
pymysql
是纯Python实现,相对而言,在某些情况下可能会比mysql-connector-python
慢一些。mysql-connector-python
通过底层C实现,可以提供更高的性能。 - 使用和API风格:
pymysql
提供了类似于Python的DB API 2.0的接口风格,而mysql-connector-python
使用了更现代化和Pythonic的API设计。API的使用和风格可能会略有不同,根据个人偏好和习惯来选择。
开发代码流程
1:连接数据库
2:创建游标对象
3:对数据进行增删改查
4:关闭游标、关闭连接
增删改查实现
insert、select
import traceback
import mysql.connector
from SnowFlake import Snowflake
import datetime
# 建立连接
def connectMySQL():
try:
connect = mysql.connector.connect(host="localhost",
port=3306,
user="xxxx",
password='xxxx',
database="xxxx",
autocommit=False)
print("mysql连接成功")
return connect
except mysql.connector.Error as err:
print(f"数据库连接失败:{err}")
# insert
def insertData(connect, cursor, insertSQL, data):
try:
# 开启事务
connect.start_transaction()
# 执行sql
cursor.execute(insertSQL, data)
# 提交事务
connect.commit()
except mysql.connector.Error as err:
connect.rollback()
# 打印堆栈信息
traceback.print_exc()
print(f"发生错误,事务回滚:{err}")
# 查询数据
def selectData(cursor, sql, param=None):
print("查询数据参数:", param)
if param is None:
cursor.execute(sql)
else:
cursor.execute(sql, param)
rows = cursor.fetchall()
for row in rows:
print("bizCode: {}, Name: {}, Age: {},createdTime:{}".format(row[0], row[1], row[2],
row[3].strftime("%Y-%m-%d %H:%M:%S")))
return rows
if __name__ == '__main__':
# 创建数据库连接
connect = connectMySQL()
# 创建游标对象
cursor = connect.cursor()
# 插入数据
insertSQL = "insert into t_cust_user (biz_code,user_name,user_age,created_time,yn) value " \
"(%s,%s,%s,%s,%s)"
# 插入数据
bizCode = str(Snowflake(worker_id=0, datacenter_id=0).generate_id())
userName = "杜甫"
userAge = "99"
yn = 1
createdTime = datetime.datetime.now()
data = (bizCode, userName, userAge, createdTime, yn)
insertData(connect, cursor, insertSQL, data)
# 查询数据
selectData(cursor, "select biz_code,user_name,user_age,created_time from t_cust_user")
param = (2,)
selectData(cursor, "select biz_code,user_name,user_age,created_time from t_cust_user where id=%s"
, param)
# 关闭游标和连接
cursor.close()
connect.close()
碰到的问题:
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement
因为无论是数字(包括整数和浮点数)、字符串、日期时间或其他任意类型,都应该使用%s
占位符。
orm第三方框架
内容来源于AI
在Python中,有许多第三方ORM(对象关系映射)框架可供选择,用于简化数据库操作和数据模型管理。以下是几个常用的Python第三方ORM框架的简要比较:
- SQLAlchemy: SQLAlchemy 是一个功能强大的ORM框架,支持多种数据库后端。它提供了高级的查询语言和灵活的对象关系映射功能。SQLAlchemy支持多种数据模型的定义方式,包括基于类的声明式方式和基于表的方式。它还提供了事务支持、连接池管理、复杂查询构建等功能。
- Django ORM: Django是一个流行的Web开发框架,其中包含了自带的ORM工具。Django ORM提供了简单易用的API,支持常见的数据库操作和查询。它使用类似于Active Record模式的数据模型定义方式,能够快速地进行数据库操作和关联查询。Django ORM还提供了数据库迁移、事务管理、缓存等功能,与Django框架无缝集成。
- Peewee: Peewee是一个轻量级的ORM框架,设计简单且易于使用。它提供了类似于Django ORM的API,支持多种数据库后端。Peewee具有简洁的模型定义语法和灵活的查询构建方式。它还提供了事务支持、连接池管理、模型迁移等功能,适合小型项目或对ORM需求相对简单的应用。
- Pony ORM: Pony ORM是一个简单但功能强大的ORM框架,支持多种数据库后端。它提供了类似于SQLAlchemy的查询构建方式,使用Python原生的生成器和表达式语法。Pony ORM具有自动连接管理、延迟加载、事务支持等特性。它还支持高级查询功能,如查询表达式、关联查询、子查询等。
这些是其中一些常见的Python第三方ORM框架,每个框架都有其独特的特点和适用场景。选择合适的ORM框架取决于项目需求、开发经验和个人偏好。建议在选择之前仔细研究和评估每个框架的文档、功能、性能以及社区支持等因素。