标签: flask-sqlalchemy

sqlalchemy group_by和count

我正在使用flask作为带有sqlalchemy的python框架.模型使用query_property来帮助我构建查询:

class Person(object):
        query = db_session.query_property()
        ....

persons = Person.query.all()
Run Code Online (Sandbox Code Playgroud)

每个人都有他居住的城市,州和国家,我想收集所有结果并输出如下内容:

    Country     State       City        Persons(count)
================================================================================
    US      NY      New York    10
    DE      Berlin      Berlin      100
Run Code Online (Sandbox Code Playgroud)

这显然需要按国家,州,城市选择计数和分组.group by thing有效但我不知道如何实现计数,因为查询属性没有select方法,在这种情况下我会写:

Person.query.select([Person.country, Person.state, Person.city, func.count(Person.id)]).all()
Run Code Online (Sandbox Code Playgroud)

谁知道如何使用query_property与group_by和count?

sqlalchemy flask-sqlalchemy

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

同一个表名的2个关系混淆了SQLAlchemy

IE:

class Share(db.Model):
    """
    Stores the Checkpoint shares between users
    """
    id = db.Column(db.Integer, primary_key=True)
    user_from_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user_from = db.relationship("User")
    user_to_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user_to = db.relationship("User")
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

ArgumentError:无法确定关系Share.user_from上的父/子表之间的连接条件.指定'primaryjoin'表达式.如果存在'secondary',则还需要'secondaryjoin'.

我怎样才能解决这个问题?

谢谢!

sqlalchemy flask flask-sqlalchemy

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

使用flask sql-alchemy上的外键引用值

我最近刚使用flask和sql-alchemy进入web开发.一切都工作正常,直到我不得不使用外键访问值.我有这样的模特:

class User(db.Model):
    _tablename='user'
    id=db.Column(db.Integer, primary_key=True)
    name=db.Column(db.String)
    email=db.Column(db.String)

class Post(db.Model):
    _tablename='post'
    id=db.Column(db.Integer, primary_key=True)
    title=db.Column(db.String)
    user=db.Column(db.Integer, db.ForeignKey('user.id'))
Run Code Online (Sandbox Code Playgroud)

我想在网页上显示所有帖子的列表,在html文件中有这样的内容:

{% for entry in entries %}
    <tr>
       <td> {{ entry.id }} </td>
       <td> {{ entry.title }} </td>
       <td> {{ entry.user_name }} </td>
       <td> {{ entry.user_email }} </td>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何使用user.id外键从用户表访问用户和电子邮件.我试过了

posts = Post.query.all()
for post in posts:
    post.user_name = User.query.filter_by(id=post.id).first()
return render_template('post.html', entries=posts)
Run Code Online (Sandbox Code Playgroud)

但是,然后不仅仅返回名称和电子邮件,如帖子中的标题,它返回的内容类似于(u'User A',)和(u'test@test.com',).我想不出任何其他方式.任何人都可以帮助我吗?

python sqlite foreign-key-relationship flask flask-sqlalchemy

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

修改SqlAlchemy模型时出现Unhashable Type错误

我正在使用实际上是从文档复制而来的最基本的烧瓶应用程序,并且收到了一个非常烦人的错误。我已经能够找到它,但不知道如何解决。我知道在实现flask-security时会出现问题,但错误来自sqlalchemy内部。有什么建议吗?

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import logging
app = Flask(__name__)

app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' #

db = SQLAlchemy(app)

roles_users = db.Table('roles_users',
        db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
        db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))

class Role(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))

    def __init__(self, name, desc):
        self.name = name 
        self.description = desc

    def __repr__(self):
        return '<Role: {}>'.format(str(self.name))

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic')) …
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-security

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

Flask-SQLAlchemy关闭连接

我正在使用PostgreSQL和Flas-SQLAlchemyFlask扩展名。

#app.py

app = Flask(__name__)
app.config['SQLALCHEMY_POOL_SIZE'] = 20
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)

#views.py

user = User(***)
db.session.add(user)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)

请注意,我没有按照文档建议关闭连接:

您必须提交会话,但不必在请求结束时将其删除,Flask-SQLAlchemy会为您完成该操作。

但是,当我运行以下PostgreSQL查询时,我可以看到一些IDLE连接:

SELECT * FROM pg_stat_activity;
Run Code Online (Sandbox Code Playgroud)

这是否意味着Flask-SQLAlchemy无法关闭连接有问题?我很担心,因为最近我remaining connection slots are reserved for non-replication superuser connections出错了。

postgresql sqlalchemy flask flask-sqlalchemy

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

teardown_request()如何与Python Flask配合使用?

我收到内部错误消息:

"TimeoutError: QueuePool limit of size 5 overflow 10 reached, connection timed out, timeout 30"
Run Code Online (Sandbox Code Playgroud)

和在线搜索给出了teardown_request()解决方案:

@app.teardown_request
def checkin_db(exc):
    try:
        print "Removing db session."
        db.session.remove()
    except AttributeError:
        pass
Run Code Online (Sandbox Code Playgroud)

现在超时错误消失了。但是我不完全理解teardown_request,看起来在每个请求之后都会调用db.session.remove()吗?还是每个错误?使用此代码安全吗?

python flask flask-sqlalchemy

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

如何在弹性beanstalk上更新python Flask应用程序?

这是我在AWS上的第一个python-Flask应用程序.它引起了头痛.

我遵循的程序是:

mkdir myapp && cd myapp
virtualenv venv
source venv/bin/activate
pip install Flask SQLAlchemy twilio psycopg2 
pip freeze > requirements.txt
mkdir .ebextensions
cd .ebxtensions
nano application.config #content of this file below
packages:
  yum:
    postgresql93-devel: []

option_settings:
  - option_name: MANDRILL_APIKEY
    value: my_value
  - option_name: MANDRILL_USERNAME
    value: my_email_address
cd ..
deactivate
eb init
eb create
Run Code Online (Sandbox Code Playgroud)

经过一系列问题,包括选项设置和psycopg2,以上工作.

现在问题是当我在本地计算机上更改应用程序时如何更新.我试过如下:

git init
eb init
git add .
git commit -m "my first update"
git aws.push
Run Code Online (Sandbox Code Playgroud)

这不起作用,并返回错误消息,说这"git aws.push"不是一个合法的命令(或类似的东西).我也试过了"eb push".

这里有2个问题:

  1. 为什么上面的程序与git失败? …

python git amazon-web-services flask-sqlalchemy amazon-elastic-beanstalk

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

在SQLAlchemy中访问联接查询结果

如果我有:

query = db.session.query(Food, Person).filter(Food.id == Person.favourite_food)
for row in db.session.execute(query)
    print row
Run Code Online (Sandbox Code Playgroud)

我得到的第一个打印的输出是:

(1, u'Alice', 25, u'F', u'z', None, False, 1, u'icecream', 1, None, False)
(5, u'Bob', 38, u'M', u'z', None, False, 3, u'pizza', 1, None, False)
Run Code Online (Sandbox Code Playgroud)

我该怎么做:

print row.name, row.gender # <-- how do I do this?
Run Code Online (Sandbox Code Playgroud)

结果似乎不再具有列名。

编辑:还有一种方法可以只用一行来序列化查询结果,就像

return Response(json.dumps(query.results), mimetype='application/json')
Run Code Online (Sandbox Code Playgroud)

python django sqlalchemy flask-sqlalchemy

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

flask-admin:如何根据个人用户而不是角色自定义视图?

众所周知,flask-admin允许具有相同角色的用户拥有相同的特权。但是,在我的应用程序中,我只想限制创建查询的用户进行查看和编辑。

例如,有许多用户具有相同的角色,称为“开发人员”,他/她创建代码审查并等待批准。

下图显示了开发人员Gina可以在列表中看到开发人员Bill的项目(这是不希望的)。我只想实现Gina,而审阅者(此处为WeskerSteve)可以在列表中查看此项目。

我将代码放在这里 ,如果不合适,我将删除链接。提前致谢。

在此处输入图片说明

python flask flask-sqlalchemy flask-admin

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

如何在SQLAlchamy中获取光标

我是Python Flask的新手。在我的项目中,我们使用以下代码创建db对象。

    app = Flask(__name__)  
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'  
    db = SQLAlchemy(app)   
Run Code Online (Sandbox Code Playgroud)

我想从数据库获取光标对象。有人可以帮我吗。我知道使用连接对象我们可以获得光标。但是我们可以从通过上述方法创建的db对象获取光标吗?谢谢。

python sqlalchemy cursor flask flask-sqlalchemy

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