V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
cc7756789
V2EX  ›  Python

一个 flask-SQLAlchemy 的问题

  •  
  •   cc7756789 · 2015-06-22 21:21:42 +08:00 · 2580 次点击
    这是一个创建于 3431 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目录结构:

    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 拥有其环境所以可以把表创建,但为什么连其他文件的表也会给创建?

    5 条回复    2015-06-23 14:12:14 +08:00
    oclock
        1
    oclock  
       2015-06-22 21:41:01 +08:00
    junnplus
        2
    junnplus  
       2015-06-22 23:36:00 +08:00 via Android
    需要在_base里导入user和article
    Shared
        3
    Shared  
       2015-06-23 09:21:35 +08:00   ❤️ 1
    @junnplus 是正解,要在 _base.py 的最下面把模型导入
    cc7756789
        4
    cc7756789  
    OP
       2015-06-23 10:44:43 +08:00
    @Shared 但我不知道为什么只导入db, 也可以创建表。创建表的类只是继承了db.Model,并没有任何调用,为什么可以进行db.create_all()把这两个类定义的表给创建?我对Python的执行方式不了解,是因为导入过程中会扫描文件,然后探测到继承db.Model的类,所以才能执行到这个类?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5348 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 07:51 · PVG 15:51 · LAX 23:51 · JFK 02:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.