SQLAlchemy 基于模型类对数据库表进行操作,所以,如果你想对已存在的数据库表进行操作,就要先为它编写对应的模型类。
对于简单的数据库,比如只有几张表,没有复杂的关系,表字段也很少,你可以直接对照表模式手写模型类。
其他情况下,使用自动化工具 SQLAcodegen / Flask-SQLAcodegen 自动生成模型类定义会更加方便,根据单独使用 SQALchemy 还是使用扩展 Flask-SQLAlchemy,你可以选择阅读对应的章节。
单独使用 SQLAlchemy
首先使用 pip 安装:
$ pip install sqlacodegen
执行下面的命令将模型类输出到 models.py 文件里(将覆盖目标文件原内容):
$ sqlacodegen --outfile models.py sqlite:///database.db
这个命令的格式如下:
$ sqlacodegen --outfile <输出的文件名> <数据库连接 URI>
–outfile / -o 选项设置输出的目标文件,不给出这个选项将直接在命令行输出生成的模型类定义,比如:
$ 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 对象定义和相关导入语句,你或许需要进行细微的调整。
你可以使用下面的命令查看更多可用的设置选项:
$ sqlacodegen --help
提示 除了使用 SQLAcodegen,你也可以直接使用内置的 Automap 扩展生成模型类。
使用 Flask-SQLAlchemy
首先使用 pip 安装 Flask-SQLAcodegen:
$ pip install flask-sqlacodegen
执行下面的命令将模型类输出到 models.py 文件里(将覆盖目标文件原内容):
$ flask-sqlacodegen --flask --outfile models.py sqlite:///database.db
这个命令的格式如下:
$ flask-sqlacodegen --flask --outfile <输出的文件名> <数据库连接 URI>
–flask 选项设置输出 Flask-SQLAlchemy 模型类,不给出这个选项将直接输出 SQLAlchemy 原生模型类定义;–outfile 选项设置输出的目标文件,不给出这个选项将直接在命令行输出生成的模型类定义,比如:
$ 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 对象定义和相关导入语句,你或许需要进行细微的调整。
你可以使用下面的命令查看更多可用的设置选项:
$ flask-sqlacodegen --help