首先简单介绍下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-8from sqlalchemy import Column, DateTime, Float, String, TIMESTAMP, textfrom sqlalchemy.dialects.mysql import INTEGERfrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()metadata = Base.metadataclass 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, Stringfrom sqlalchemy.orm import sessionmakerfrom 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=sendereqd.sign_time=signtimeeqd.cust_name=customereqd.offset_distance=lengtheqd.update_date=datetime.now()
最后不要忘了提交修改
session.commit()