我正在使用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?
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'.
我怎样才能解决这个问题?
谢谢!
我最近刚使用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
我正在使用实际上是从文档复制而来的最基本的烧瓶应用程序,并且收到了一个非常烦人的错误。我已经能够找到它,但不知道如何解决。我知道在实现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) 我正在使用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出错了。
我收到内部错误消息:
"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()吗?还是每个错误?使用此代码安全吗?
这是我在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个问题:
python git amazon-web-services flask-sqlalchemy amazon-elastic-beanstalk
如果我有:
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) 众所周知,flask-admin允许具有相同角色的用户拥有相同的特权。但是,在我的应用程序中,我只想限制创建查询的用户进行查看和编辑。
例如,有许多用户具有相同的角色,称为“开发人员”,他/她创建代码审查并等待批准。
下图显示了开发人员Gina可以在列表中看到开发人员Bill的项目(这是不希望的)。我只想实现Gina,而审阅者(此处为Wesker和Steve)可以在列表中查看此项目。
我将代码放在这里 ,如果不合适,我将删除链接。提前致谢。
我是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对象获取光标吗?谢谢。
flask-sqlalchemy ×10
flask ×7
python ×7
sqlalchemy ×5
cursor ×1
django ×1
flask-admin ×1
git ×1
postgresql ×1
sqlite ×1