SQLAlchemy 基于模型类对数据库表进行操作,所以,如果你想对已存在的数据库表进行操作,就要先为它编写对应的模型类。
对于简单的数据库,比如只有几张表,没有复杂的关系,表字段也很少,你可以直接对照表模式手写模型类。
其他情况下,使用自动化工具 SQLAcodegen / Flask-SQLAcodegen 自动生成模型类定义会更加方便,根据单独使用 SQALchemy 还是使用扩展 Flask-SQLAlchemy,你可以选择阅读对应的章节。
单独使用 SQLAlchemy
首先使用 pip 安装:
1 |
$ pip install sqlacodegen |
执行下面的命令将模型类输出到 models.py 文件里(将覆盖目标文件原内容):
1 |
$ sqlacodegen --outfile models.py sqlite:///database.db |
这个命令的格式如下:
1 |
$ sqlacodegen --outfile <输出的文件名> <数据库连接 URI> |
–outfile / -o 选项设置输出的目标文件,不给出这个选项将直接在命令行输出生成的模型类定义,比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ sqlacodegen sqlite:///data.db # coding: utf-8 from sqlalchemy import Column, DateTime, Integer, String from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() metadata = Base.metadata class Message(Base): __tablename__ = 'message' id = Column(Integer, primary_key=True) name = Column(String(20)) body = Column(String(200)) timestamp = Column(DateTime, index=True) |
提示 如上所示,生成的模型类定义会包含 Base 和 metadata 对象定义和相关导入语句,你或许需要进行细微的调整。
你可以使用下面的命令查看更多可用的设置选项:
1 |
$ sqlacodegen --help |
提示 除了使用 SQLAcodegen,你也可以直接使用内置的 Automap 扩展生成模型类。
使用 Flask-SQLAlchemy
首先使用 pip 安装 Flask-SQLAcodegen:
1 |
$ pip install flask-sqlacodegen |
执行下面的命令将模型类输出到 models.py 文件里(将覆盖目标文件原内容):
1 |
$ flask-sqlacodegen --flask --outfile models.py sqlite:///database.db |
这个命令的格式如下:
1 |
$ flask-sqlacodegen --flask --outfile <输出的文件名> <数据库连接 URI> |
–flask 选项设置输出 Flask-SQLAlchemy 模型类,不给出这个选项将直接输出 SQLAlchemy 原生模型类定义;–outfile 选项设置输出的目标文件,不给出这个选项将直接在命令行输出生成的模型类定义,比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ flask-sqlacodegen --flask sqlite:///data.db # coding: utf-8 from sqlalchemy import Column, DateTime, Integer, String from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class Message(db.Model): __tablename__ = 'message' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) body = db.Column(db.String(200)) timestamp = db.Column(db.DateTime, index=True) |
提示 如上所示,生成的模型类定义会包含一个 db 对象定义和相关导入语句,你或许需要进行细微的调整。
你可以使用下面的命令查看更多可用的设置选项:
1 |
$ flask-sqlacodegen --help |