Skip to content

sqlacodegen 数据库表结构生成SQLAlchemy model代码

0 背景

有时, 我们已经有了现成的sql表, 但是当表的字段比较复杂或者很多的时候, 我们手动编写SQLAlchemy Model表, 会比较繁琐, 因此可以使用一个懒人专用库sqlacodegen自动生成 model 模型代码。

根据现有的关系型数据库中的表结构生成 SQLAlchemy ORM模型的代码,它允许我们使用面向对象的方式来操作数据库,而不需要直接编写 SQL 查询语句。使用 sqlacodegen 工具,我们可以通过数据库的表结构生成相应的 SQLAlchemy 模型代码,这样我们就可以在 Python 中使用这些模型来进行数据库操作,而不需要手动编写这些模型类。

1 安装

使用pip命令来安装它:

pip install sqlacodegen

2 使用

在命令行状态下使用以下命令进行操作.

mysql导出表命令

sqlacodegen mysql+pymysql://root:root@127.0.0.1:3306/users_3 --outfile=model3.py

sqlite导出表命令

sqlacodegen sqlite:///testdb.db --outfile=models.py

导出的Model代码如下:

3 其他用法

命令行参数

sqlacodegen [-h] [--version] [--schema SCHEMA] [--tables TABLES] [--noviews] [--noindexes] [--noconstraints]
            [--nojoined] [--noinflect] [--noclasses] [--nocomments] [--outfile OUTFILE]
            [url]

--tables: 指定导出的表名称,多个表用逗号隔开,如果命令不带--tables 参数,会生成所有的表.

--outfile: 指定导出模块名称models.py

自动加载表结构

使用autoload = True, 可以让模型代码跟数据库表字段关联起来,它会自动加载 model 的 Column, 但是这种方法我们看不到代码里面表字段名称. 一般不使用

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.sql.schema import Table

engine = create_engine("mysql+pymysql://root:123456@localhost:3306/web")
Base = declarative_base()
metadata = Base.metadata
metadata.bind = engine

class Employee(Base):
    __table__ = Table("employees", metadata, autoload=True)

3 关于

欢迎关注我的个人公众号