V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
happywowwow
V2EX  ›  问与答

flask-SQLAlchemy 在 query 时候的问题

  •  
  •   happywowwow · 2015-01-21 11:46:38 +08:00 · 4222 次点击
    这是一个创建于 3595 天前的主题,其中的信息可能已经有所发展或是发生改变。
    print (type(Archive.query.filter_by))
    print (type(Archive.query.filter_by(archive_name='aaa')))
    print (Archive.query.filter_by(archive_name='aaa'))
    print (type(Archive.query.filter_by(archive_name='aaa').first))
    print (type(Archive.query.filter_by(archive_name='aaa').first()))
    
    <type 'instancemethod'>
    <class 'flask_sqlalchemy.BaseQuery'>
    SELECT flask_archive.id AS flask_archive_id, flask_archive.archive_name AS flask_archive_archive_name 
    FROM flask_archive 
    WHERE flask_archive.archive_name = :archive_name_1
    <type 'instancemethod'>
    

    最后一个没有输出,也没有错误提示就退出了。pdb调试 出现
    "The program exited via sys.exit(). Exit status: -9"

    1. 直接在 python 互式里面,可以 query
    2. 写份脚本也可以
    3. 现在怀疑原因是项目里面循环 import 了什么包

    引用关系,
    主app 在myapp.py

    from flask import Flask
    app = Flask(__name__)
    app.config.from_object('config')
    from views import *
    if '__main__' == __name__:
    □□□□app.debug = True
    □□□□app.run()

    views.py

    from models import Archive, Tag, Comment, Post, db
    @app.route('/blabla')
    def index():
    □□□□print (type(Archive.query.filter_by))
    □□□□print (type(Archive.query.filter_by(archive_name='aaa')))
    □□□□print (Archive.query.filter_by(archive_name='aaa'))
    □□□□print (type(Archive.query.filter_by(archive_name='aaa').first))
    □□□□print (type(Archive.query.filter_by(archive_name='aaa').first()))
    □□□□a = Archive.query.filter_by(archive_name='aaa').first()
    □□□□return "Hello world"

    models.py

    from myapp import app
    from flask.ext.sqlalchemy import SQLAlchemy, BaseQuery
    db = SQLAlchemy(app)
    class Archive(db.Model):
    □□□□pass
    class Tag(db.Model):
    □□□□pass

    以上代码简化了的

    5 条回复    2015-01-21 13:59:47 +08:00
    wuyu1998
        1
    wuyu1998  
       2015-01-21 11:53:35 +08:00
    将所以的from xxx import *改为import xxx
    wuyu1998
        2
    wuyu1998  
       2015-01-21 11:55:36 +08:00
    views.py

    from models import Archive, Tag, Comment, Post, db
    @app.route('/blabla')
    def index():
    □□□□q = Archive.query.filter_by(archive_name='aaa')
    □□□□print ('q: {0}'.format(q))
    □□□□obj = q.first()
    □□□□print ('obj: {0}'.format(obj))
    □□□□return "Hello world"
    wuyu1998
        3
    wuyu1998  
       2015-01-21 11:58:10 +08:00
    删除myapp.py中的
    from views import *
    wuyu1998
        4
    wuyu1998  
       2015-01-21 12:00:18 +08:00
    最关键的问题,models.py中没有建立字段,无法和数据库的表建立映射关系。
    class Archive(db.Model):
    □□□□pass
    happywowwow
        5
    happywowwow  
    OP
       2015-01-21 13:59:47 +08:00
    @wuyu1998
    1.删除myapp.py中的
    from views import * 那这不是什么没了?

    2. □□□□pass 我完整代码没贴上来而已。。。其实是有的。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   908 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:19 · PVG 04:19 · LAX 12:19 · JFK 15:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.