首先简单介绍下SQLalchemy库和sqlacodegen库。
SQLalchemy 库是一个流行的 Python 数据库工具,用于与各种关系型数据库进行交互。它提供了一个统一的 API,使得开发人员可以使用相同的代码来操作不同的数据库,而无需关心数据库的具体细节。
`sqlacodegen`库是一个用于生成 Python 数据库模型的工具。它可以帮助你在开发过程中更快速地创建数据库模型,减少手动编写模型代码的工作。它会根据你提供的数据库连接信息和要生成模型的表名,自动生成相应的 Python 类。
接下来介绍下如何使用SQLalchemy库来操作数据库(不在flask等框架内使用)
1、安装SQLalchemy库和sqlacodegen库
安装SQLalchemy库
pip install sqlalchemy
安装sqlacodegen
pip install sqlacodegen
目前sqlacodegen库和flask-sqlacodegen库对SQLalchemy库的版本要求不一样,不能同时安装这两个库,如果需要请在虚拟环境中使用。
2、生成model类文件
在项目目录中,打开命令行工具,执行以下命令。
sqlacodegen mysql+pymysql://root:root3@127.0.0.1:3306/test --tables t_comm_grid --outfile models.py
sqlacodegen mysql+pymysql://root:root3@127.0.0.1:3306/test:指定了要连接的数据库。这里使用的是 MySQL 数据库,通过 `mysql+pymysql` 指定了数据库驱动和连接字符串。`root:root3@127.0.0.1:3306` 是数据库的用户名、密码和地址。`test` 是数据库名称。
--tables t_comm_grid:指定了要生成模型的表名。这里只选择了表 `t_comm_grid`。如果需要生成库中所有的表,则不需要添加此参数。--outfile modelsm.py:指定了生成的模型文件的名称。这里将模型文件命名为 `modelsm.py`。执行这个命令后,`sqlacodegen` 工具将根据指定的表名和连接信息,生成一个 Python 模型文件。这个模型文件将包含映射到表的类和相应的属性和方法,以便在 Python 代码中操作数据库表。
生成的model对象文件格式如下:
# coding: utf-8
from sqlalchemy import Column, DateTime, Float, String, TIMESTAMP, text
from sqlalchemy.dialects.mysql import INTEGER
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
class TQianshouDeliverRecord(Base):
__tablename__ = 't_qianshou_deliver_record'
__table_args__ = {'comment': '送货签收表'}
id = Column(String(100), primary_key=True)
songhuo_user_name = Column(String(100))
songhou_time = Column(DateTime, comment='时间')
sign_time = Column(DateTime, comment='日期')
license = Column(String(100), comment='证号')
cust_name = Column(String(255), comment='名称')
offset_distance = Column(Float(20, True), comment='距离')
is_contrast = Column(INTEGER(2), comment='是否对比(0,未对比 1,已对比)')
result = Column(String(255), comment='正常,异常')
contrast_time = Column(DateTime, comment='对比时间')
state = Column(INTEGER(11), nullable=False, server_default=text("'1'"), comment='数据状态0、删除1、正常')
create_id = Column(String(40), comment='添加时间')
create_date = Column(TIMESTAMP)
update_id = Column(String(40))
update_date = Column(TIMESTAMP)
delete_id = Column(String(40))
delete_date = Column(TIMESTAMP)
注意:如果在生成的过程中报以下错误,
ImportError: cannot import name 'ArgSpec' from 'inspect'
找到对应的文件,将以下一行注释掉以后再次重新执行以上命令。
3、在其他文件中使用生成的model对象操作数据库。
(1)导入所需的库,以及索要操作的数据库表对象
from sqlalchemy import create_engine,MetaData,Column, Integer, String
from sqlalchemy.orm import sessionmaker
from models import TQianshouDeliverRecord
(2)创建数据库实例
# 数据库连接
DATABASE_URI = 'mysql+pymysql://root:root@127.0.0.1:3306/test'
engine = create_engine(DATABASE_URI,encoding='utf-8',echo=True)
Session = sessionmaker(bind=engine)
session = Session()
(3)对数据库进行操作
查询
eqd = session.query(TQianshouDeliverRecord).filter_by(license=license,sign_time=signtime).first()
添加
id = str(uuid.uuid4())
uploadimg(downloadDir,id)
qd = TQianshouDeliverRecord(id=id,
license=license,
songhuo_user_name=sender,
songhou_time=senddate,
sign_time=signtime,
cust_name=customer,
offset_distance=length,
create_date=datetime.now(),
)
session.add(qd)
更新
eqd.songhuo_user_name=sender
eqd.sign_time=signtime
eqd.cust_name=customer
eqd.offset_distance=length
eqd.update_date=datetime.now()
最后不要忘了提交修改
session.commit()