小编Pac*_*aco的帖子

使用Flask-SQLAlchemy的许多人返回原始sql而不是执行

我正在使用带有sqlalchemy的python框架烧瓶.

我的多对多看起来像这样:

collections_questions = db.Table('collections_questions',
         db.Column('question_id',db.Integer,db.ForeignKey('question.id')),
         db.Column('collection_id',db.Integer,db.ForeignKey('collection.id'))
)
class Collection(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    title = db.Column(db.String)
    lang = db.Column(db.Integer)
    questions = db.relationship('Question',secondary=collections_questions,backref=db.backref('collections'),lazy='dynamic')
    def __init__(self,title,lang=0):
      self.title = title
      self.lang = lang

class Question(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String)
    question = db.Column(db.String)
    lang = db.Column(db.Integer)
    type = db.Column(db.Integer)

    def __init__(self,title,question,lang=0,type=0):
        self.title = title
        self.question = question
        self.lang = lang
        self.type = type
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做

collection = db.session.query(Collection).get(1)
Run Code Online (Sandbox Code Playgroud)

collection.questions不返回问题列表,而是返回以下查询.

SELECT question.id AS question_id, question.title AS question_title, question.question AS question_question, question.lang AS question_lang, …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy flask flask-sqlalchemy

4
推荐指数
1
解决办法
996
查看次数

如何从桌面应用程序向python flask服务器发送http请求?

我已经使用flask框架配置了python服务器.现在我想从桌面应用程序向服务器发送请求.我的服务器位置是:http://127.0.0.1:5000/

我编写的代码可以在浏览器中运行,但我想从我的桌面应用程序访问该代码.

import flask,flask.views import os import functools 
app=flask.Flask(__name__)

app.secret_key="xyz" users={'pravin':'abc'}
class Main(flask.views.MethodView):
    def get(self):
        return flask.render_template('index.html')
    def post(self):
        if 'logout' in flask.request.form:
            flask.session.pop('username',None)
            return flask.redirect(flask.url_for('index'))
        required=['username','passwd']
        for r in required:
        if r not in flask.request.form:
            flask.flash("Error: {0} is required.".format(r))
            return flask.redirect(flask.url_for('index'))

        username=flask.request.form['username']
        password=flask.request.form['passwd']
        if username in users and users[username]==password:
            flask.session['username']=username
        else:
            flask.flash("Username doesn`t exist or incorrect password.")

        return flask.redirect(flask.url_for('index'))

app.add_url_rule("/",view_func=Main.as_view("index"),methods=["GET","POST"])
app.debug=True
app.run()
Run Code Online (Sandbox Code Playgroud)

python flask python-2.7 flask-sqlalchemy

4
推荐指数
1
解决办法
2577
查看次数

模型的Python清理导入 - SQL Alchemy

我有一个带有以下目录结构的烧瓶应用程序:

  • MYAPP /
    • application.py
    • __init__.py
    • 楷模/
      • __init__.py
      • user.py

模型使用Flask-SQLAlchemy,因此,他们需要访问db对象(SQLAlchemy实例)application.py

user.py:

import sys,os
sys.path.append('/path/to/application/package')

from testapp import db

class User(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(255),unique=True)
    age = db.Column(db.Integer)

    def __init__(self,username,age):
        self.username = username
        self.age = age

    def __repr__(self):
        return '<User %r>' % self.username 
Run Code Online (Sandbox Code Playgroud)

因为任何模型都需要访问应用程序的SQLAlchemy实例,该db属性,我必须将整个包放在路径上,然后从主应用程序模块导入.为了理智,我想将模型保存在单独的文件中.我是否需要将路径代码放在每个模型的顶部?有没有更好的办法?我宁愿没有这样的完整路径输入,因为它们可能被部署到具有不同目录结构的不同主机.理想情况下,会有一些内部处理路径的方法,所以当它被用作另一个用户时,mod_wsgi我不必手动更改代码.

python flask flask-sqlalchemy

4
推荐指数
1
解决办法
2527
查看次数

Flask/Tornado中的Gzip响应

我有一个简单的Flask应用运行.服务我使用龙卷风.启动服务器的代码如下所示:

# Run the app in server mode
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(port)
IOLoop.instance().start()
Run Code Online (Sandbox Code Playgroud)

其中app是Flask WSGI app对象(app = Flask(__name__)).

现在,服务器使用整个JSON答案响应每个请求,是否有(简单)方式返回Gzip数据?在Tornado网站上我找到了http://www.tornadoweb.org/documentation/releases/v2.1.0.html?highlight=gzip,所以必须有Tornado,但Flask解决方案也很棒.

python gzip wsgi tornado flask

4
推荐指数
2
解决办法
5390
查看次数

像在Django中一样为Flask制作urls.py文件

也许有人可以帮助/解释我,如何urls.py在Django中为Flask 创建文件?

  • main.py - 主项目文件.它仅包括app runner(app.run()).
  • urls.py位于同一目录,需要提供视图views.py.

python django url-pattern flask

4
推荐指数
1
解决办法
2773
查看次数

如何让Jinja2将所有UndefinedError异常转换为空字符串?

我的代码中的很多模型都有关系,可以是None.很多时候,这需要None在访问数据之前进行检查:

{% if foo.bar %}
   {{ foo.bar.baz }}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

如果我不添加该检查,则该页面会完全出现UndefinedError.从Flask应用程序运行时,有没有什么方法可以让我在Jinja2中默默地失败UndefinedErrors?

python jinja2 flask

4
推荐指数
1
解决办法
1264
查看次数

SQLAlchemy Flask过滤器查询结合两个模型的结果

我试图通过date_registered订购用户的感谢(帖子).

目前,有两个查询可以获得两个列表,然后手动组合并重新排序.用户可以是感谢者或接收者.感谢总是一个单独的给予者,但可能有多个接收者.因此我有一个Thank和一个ThankReceivedByUser模型来获得结果.

class Thank(db.Model):

    id = db.Column(db.Integer, primary_key = True)
    giver_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable = False)
    status = db.Column(db.SmallInteger, nullable = False) 
    date_registered = db.Column(db.DateTime, nullable = False)

class ThankReceivedByUser(db.Model):

    id = db.Column(db.Integer, primary_key = True)
    thank_id = db.Column(db.Integer, db.ForeignKey("thank.id"), nullable = False)
    receiver_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable = False)
    status = db.Column(db.SmallInteger, nullable = False) 
    date_registered = db.Column(db.DateTime, nullable = False)
Run Code Online (Sandbox Code Playgroud)

如果可能的话,在构建单个查询时获得一些提示会很棒.

python orm sqlalchemy flask flask-sqlalchemy

4
推荐指数
2
解决办法
1万
查看次数

由于会话错误,无法从SQLAlchemy中删除行

我想从我的表中删除一个条目.这是我删除功能的代码.

@app.route("/delete_link/<link_id>", methods=['GET', 'POST'])
def delete_link(link_id):
    link = models.Link.query.filter(models.Link.l_id == link_id).first()
    db.session.delete(link)
    db.session.commit()
    return flask.redirect(flask.url_for('links'))
Run Code Online (Sandbox Code Playgroud)

这一行:db.session.delete(link)给我这个错误:

InvalidRequestError:对象''已附加到会话'1'(这是'2')

我也尝试过这段代码:

@app.route("/delete_link/<link_id>", methods=['GET', 'POST'])
def delete_link(link_id):
    link = models.Link.query.filter(models.Link.l_id == link_id)
    link.delete()
    db.session.commit()
    return flask.redirect(flask.url_for('links'))
Run Code Online (Sandbox Code Playgroud)

它不会更新数据库.链接不能在会话中我猜,但我不知道如何检查,以及如何解决它.我是sqlalchemy的新手.

编辑:

我用它来创建我的db变量,它可能在这个阶段创建会话(这是在代码的顶部).它来自烧瓶文档

from yourapplication import db
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy

4
推荐指数
1
解决办法
3003
查看次数

Flask没有对代码更改做出反应

我是Flask的新手,正在实施一个小应用程序.我成功地在访问某个网页时显示"Hello World",但即使我更改了代码,也无法将其更改为"Hello World Again".为什么它仍然运行旧代码,如何让它运行新代码?谢谢.

python flask

3
推荐指数
1
解决办法
1926
查看次数

uWSGI + Flask + boto - 线程安全

假设我有一个Flask应用程序,由uWSGI使用多个进程提供服务,例如:

uwsgi --socket 127.0.0.1:3031 --file flaskapp.py --callable app --processes 4
Run Code Online (Sandbox Code Playgroud)

我的Flask应用程序组织如下:

/flaskapp
    app.py
    /db
        __init__.py
        somefile.py
        somefile2.py
        ...
Run Code Online (Sandbox Code Playgroud)

我正在使用boto连接到DynamoDB.该__init__.py文件为空,每个somefilexxx.py文件都是这样的:

db = boto.connect_dynamodb()
table = db.get_table('table')
def do_stuff_with_table():
Run Code Online (Sandbox Code Playgroud)

我不在应用程序中使用线程,我不认为uWSGI使用线程,除非我明确启用它们--threads.这个设置有意义吗?是否有任何线程问题我不得不担心urllib(你可能会猜我对线程知之甚少)?

或者,它会更有意义调用connect_dynamodb()__init__.py的文件,并只加载在表somefile.py文件?

python boto flask uwsgi

3
推荐指数
1
解决办法
1761
查看次数