为已存在的数据库生成 SQLAlchemy / Flask-SQLAlchemy 模型类
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-8from 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