一个 flask-SQLAlchemy 的问题

2015-06-22 21:21:42 +08:00
 cc7756789

目录结构:

models
————_base.py
————\user.py
————\article.py

其中_base.py定义了db

from flask.ext.sqlalchemy import SQLAlchemy
from flask import Flask

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://alwme:7756789w@localhost/flask_db'
db = SQLAlchemy(app)

user.py

from ._base import db

class User(db.Model):
    #表结构

article.py

from ._base import db

class Article(db.Model):
    #表结构

为什么在shell中:

>>> from models._base import db
>>> db.create_all()
#从_base.py导入数据库中没有创建任何东西

而:

>>> from models.article import db
>>> db.create_all()
#会连User表一起创建

感觉越学越不明白了,如果说在导入db的过程中python把article.py文件扫一遍,然后Article类继承db.model 拥有其环境所以可以把表创建,但为什么连其他文件的表也会给创建?

2606 次点击
所在节点    Python
5 条回复
oclock
2015-06-22 21:41:01 +08:00
junnplus
2015-06-22 23:36:00 +08:00
需要在_base里导入user和article
Shared
2015-06-23 09:21:35 +08:00
@junnplus 是正解,要在 _base.py 的最下面把模型导入
cc7756789
2015-06-23 10:44:43 +08:00
@Shared 但我不知道为什么只导入db, 也可以创建表。创建表的类只是继承了db.Model,并没有任何调用,为什么可以进行db.create_all()把这两个类定义的表给创建?我对Python的执行方式不了解,是因为导入过程中会扫描文件,然后探测到继承db.Model的类,所以才能执行到这个类?
Shared
2015-06-23 14:12:14 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/200407

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX