有关于 flask 创建 create_all()之前导入 models 的几个问题,希望各位可以帮忙看看 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sevenQu
V2EX    Flask

有关于 flask 创建 create_all()之前导入 models 的几个问题,希望各位可以帮忙看看

  •  
  •   sevenQu 2018-07-12 11:34:34 +08:00 2542 次点击
    这是一个创建于 2713 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 源码点击跳转
    • 我把简单的源代码放到了 github 上,问题也写在了 readme 上,问题同下

    • 进入 app 文件夹下的__init__内
    1. 使用 import app.models.wordRepertory,并直接未导入继承 db.models 类,其 db.models 全部在 wordRepertory 命名空间下,所以为什么没有继承 db.models 的类还可以创建数据库?
    2. from app.models.wordRepertory import CET4,仅仅导入了 CET4 的情况下,创建数据库,我发现会全部数据表,创建包括 CET6 和 Kaoyan 数据表都会创建,这是为什么?
    3. 如果把 import app.models.wordRepertory 放到 create_app 里面会报错,放在外面就不会报错,求解原因?
    7 条回复    2018-07-12 18:17:11 +08:00
    mink
        1
    mink  
       2018-07-12 15:04:32 +08:00
    @sevenQu 就算你没有导入模型, 在你的模型类继承 db.models 的时候, db 就会把这些模型记录下来。db.create_all() 是把所有跟 db 绑定的模型创建出来。 所以只要 db.models 绑定了模型, 然后执行 create_all 命令就会创建数据表
    sevenQu
        2
    sevenQu  
    OP
       2018-07-12 15:08:34 +08:00
    @mink 你试一下我的源代码?确实创建不了,不知道是不是我的源代码哪里有问题?帮忙看看?
    mink
        3
    mink  
       2018-07-12 16:05:49 +08:00
    @sevenQu 我刚试了一下, 你这个创建不了不是 sqlalchemy 的问题, 而是你在函数中 import app.models.wordRepertory 的话, 会把 app 变量改成导入的当前模块, 也就是 app/__init__.py 这是因为 import 会把模块的名称默认导入到作用于中, 也就是把 Flask 实例, 改成了模块对象, 之后你在 db.init_app 中调用 就出错了
    mink
        4
    mink  
       2018-07-12 16:06:54 +08:00
    @sevenQu 你如果想要调用模块, 可以使用别名来修改模块在局部作用于的变量名 import app.models.wordRepertory as xxxx
    sevenQu
        5
    sevenQu  
    OP
       2018-07-12 16:45:21 +08:00
    @mink 方便加你 qq 吗?咱们多聊聊,我还是有点不太明白,我 qq1933592511,加我也可以
    sevenQu
        6
    sevenQu  
    OP
       2018-07-12 16:47:13 +08:00
    @mink 不明白为什么 import app.models.wordRepertory 的话, 会把 app 变量改成导入的当前模块,import 里没有 app 吧,还有是不是一定要引入 models 型才能创建数据表?
    sevenQu
        7
    sevenQu  
    OP
       2018-07-12 18:17:11 +08:00
    @mink 谢谢,谢谢,这些问题,我终于明白了,很开心,很感谢您一直的回答,谢谢。
    ps:如果您方便的话就加我上面的 qq,十分感谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3183 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 11:25 PVG 19:25 LAX 03:25 JFK 06:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86