<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SQLAcodegen &#8211; 李辉 / Grey Li</title>
	<atom:link href="https://greyli.com/tag/sqlacodegen/feed/" rel="self" type="application/rss+xml" />
	<link>https://greyli.com</link>
	<description>一个编程和写作爱好者的在线记事本</description>
	<lastBuildDate>Thu, 06 Nov 2025 11:36:11 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.26</generator>

<image>
	<url>https://greyli.com/wp-content/uploads/2025/03/avatar-500-compressed-144x144.jpg</url>
	<title>SQLAcodegen &#8211; 李辉 / Grey Li</title>
	<link>https://greyli.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>为已存在的数据库生成 SQLAlchemy / Flask-SQLAlchemy 模型类</title>
		<link>https://greyli.com/generate-flask-sqlalchemy-model-class-for-exist-database/</link>
		<comments>https://greyli.com/generate-flask-sqlalchemy-model-class-for-exist-database/#respond</comments>
		<pubDate>Wed, 03 Apr 2019 03:46:15 +0000</pubDate>
		<dc:creator><![CDATA[李辉]]></dc:creator>
				<category><![CDATA[计算机与编程]]></category>
		<category><![CDATA[Flask]]></category>
		<category><![CDATA[Flask-SQLAlchemy]]></category>
		<category><![CDATA[SQLAcodegen]]></category>
		<category><![CDATA[SQLAlchemy]]></category>

		<guid isPermaLink="false">http://greyli.com/?p=2425</guid>
		<description><![CDATA[SQLAlchemy 基于模型类对数据库表进行操作，所以，如果你想对已存在的数据库表进行操作，就要先为它编写对 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>
	SQLAlchemy 基于模型类对数据库表进行操作，所以，如果你想对已存在的数据库表进行操作，就要先为它编写对应的模型类。
</p>
<p>
	对于简单的数据库，比如只有几张表，没有复杂的关系，表字段也很少，你可以直接对照表模式手写模型类。
</p>
<p>
	其他情况下，使用自动化工具 <a data-editable="true" data-offset-key="b32v9-3-0" href="https://pypi.python.org/pypi/sqlacodegen" target="_blank">SQLAcodegen</a>&nbsp;/&nbsp;<a data-editable="true" data-offset-key="b32v9-1-0" href="https://github.com/ksindi/flask-sqlacodegen" target="_blank">Flask-SQLAcodegen</a>&nbsp;自动生成模型类定义会更加方便，根据单独使用 SQALchemy 还是使用扩展 Flask-SQLAlchemy，你可以选择阅读对应的章节。
</p>
<h2>
	单独使用 SQLAlchemy<br />
</h2>
<p>
	首先使用 pip 安装：
</p>
<pre>
$ pip install sqlacodegen</pre>
<p>
	执行下面的命令将模型类输出到 models.py 文件里（将覆盖目标文件原内容）：
</p>
<pre>
$ sqlacodegen --outfile models.py sqlite:///database.db</pre>
<p>
	这个命令的格式如下：
</p>
<pre>
$ sqlacodegen --outfile &lt;输出的文件名&gt; &lt;数据库连接 URI&gt;</pre>
<p>
	&#8211;outfile / -o 选项设置输出的目标文件，不给出这个选项将直接在命令行输出生成的模型类定义，比如：
</p>
<pre>
$ 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):
&nbsp; &nbsp; __tablename__ = &#39;message&#39;

&nbsp; &nbsp; id = Column(Integer, primary_key=True)
&nbsp; &nbsp; name = Column(String(20))
&nbsp; &nbsp; body = Column(String(200))
&nbsp; &nbsp; timestamp = Column(DateTime, index=True)</pre>
<p>
	<em>提示 如上所示，生成的模型类定义会包含 Base 和 metadata 对象定义和相关导入语句，你或许需要进行细微的调整。</em>
</p>
<p>
	你可以使用下面的命令查看更多可用的设置选项：
</p>
<pre>
$ sqlacodegen --help</pre>
<p>
	<em>提示 除了使用 SQLAcodegen，你也可以直接使用内置的 <a data-editable="true" data-offset-key="eprpr-1-0" href="https://docs.sqlalchemy.org/en/latest/orm/extensions/automap.html" target="_blank">Automap</a> 扩展生成模型类。</em>
</p>
<h2>
	使用 Flask-SQLAlchemy<br />
</h2>
<p>
	首先使用 pip 安装 Flask-SQLAcodegen：
</p>
<pre>
$ pip install flask-sqlacodegen</pre>
<p>
	执行下面的命令将模型类输出到 models.py 文件里（将覆盖目标文件原内容）：
</p>
<pre>
$ flask-sqlacodegen --flask --outfile models.py sqlite:///database.db</pre>
<p>
	这个命令的格式如下：
</p>
<pre>
$ flask-sqlacodegen --flask --outfile &lt;输出的文件名&gt; &lt;数据库连接 URI&gt;</pre>
<p>
	&#8211;flask 选项设置输出 Flask-SQLAlchemy 模型类，不给出这个选项将直接输出 SQLAlchemy 原生模型类定义；&#8211;outfile&nbsp;选项设置输出的目标文件，不给出这个选项将直接在命令行输出生成的模型类定义，比如：
</p>
<pre>
$ 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__ = &#39;message&#39;

    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)</pre>
<p>
	<em>提示 如上所示，生成的模型类定义会包含一个 db 对象定义和相关导入语句，你或许需要进行细微的调整。</em>
</p>
<p>
	你可以使用下面的命令查看更多可用的设置选项：
</p>
<pre>
$ flask-sqlacodegen --help
</pre>
]]></content:encoded>
			<wfw:commentRss>https://greyli.com/generate-flask-sqlalchemy-model-class-for-exist-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
