我正在使用Flask和SQLAlchemy.
假设我有一个用户模型,其中包含字段'popular'和'date_created'.我想做以下查询:
SELECT * FROM user ORDER BY popularity DESC, date_created DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud)
如何在SQLAlchemy中执行多个order_by?对于单个,这适用:
User.query.order_by(User.popularity.desc()).limit(10).all()
Run Code Online (Sandbox Code Playgroud)
我应该添加另一个order_by吗?或者将流行度和date_created都放在我当前的order_by中?我希望人气在date_created上优先订购.
非常感谢你!
我可以在座位表中查询没有分配邀请的所有座位:
seats = Seat.query.filter_by(invite=None).all()
Run Code Online (Sandbox Code Playgroud)
但是,当查询所有分配了邀请的座位时,我得到一个错误:
seats = Seat.query.filter_by(invite!=None).all()
Run Code Online (Sandbox Code Playgroud)
这是我的Seat类:
NameError: name 'invite' is not defined
Run Code Online (Sandbox Code Playgroud)
如何查询所有者不为空的所有座位?
谢谢
如何在第一次迁移中插入一些种子数据?如果迁移不是最好的地方,那么最佳做法是什么?
"""empty message
Revision ID: 384cfaaaa0be
Revises: None
Create Date: 2013-10-11 16:36:34.696069
"""
# revision identifiers, used by Alembic.
revision = '384cfaaaa0be'
down_revision = None
from alembic import op
import sqlalchemy as sa
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table('list_type',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=80), nullable=False),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('name')
)
op.create_table('job',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('list_type_id', sa.Integer(), nullable=False),
sa.Column('record_count', sa.Integer(), nullable=False),
sa.Column('status', sa.Integer(), nullable=False),
sa.Column('sf_job_id', sa.Integer(), nullable=False),
sa.Column('created_at', sa.DateTime(), nullable=False),
sa.Column('compressed_csv', sa.LargeBinary(), nullable=True),
sa.ForeignKeyConstraint(['list_type_id'], ['list_type.id'], ), …Run Code Online (Sandbox Code Playgroud) 我有3个表:User,Community,community_members(用于关系many2many的用户和社区).
我使用Flask-SQLAlchemy创建这个表:
community_members = db.Table('community_members',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
)
class Community(db.Model):
__tablename__ = 'community'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False, unique=True)
members = db.relationship(User, secondary=community_members,
backref=db.backref('community_members', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)
现在我想向community_members添加其他字段,如下所示:
community_members = db.Table('community_members',
db.Column('id', db.Integer, primary_key=True),
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('community_id', db.Integer, db.ForeignKey('community.id')),
db.Column('time_create', db.DateTime, nullable=False, default=func.now()),
)
Run Code Online (Sandbox Code Playgroud)
现在在python shell中我可以这样做:
创建社区:
> c = Community()
> c.name = 'c1'
> db.session.add(c)
> db.session.commit()
Run Code Online (Sandbox Code Playgroud)
将成员添加到社区:
> u1 = User.query.get(1)
> u2 = User.query.get(2)
> c.members.append(u1)
> c.members.append(u2)
> db.session.commit() …Run Code Online (Sandbox Code Playgroud) 我有一个使用Flask-SQLAlchemy(v2.0)的Flask(v0.10.1)应用程序,我正在尝试配置Pylint来检查它.使用Python 3.4.2运行.
第一个错误是:
Instance of 'SQLAlchemy' has no 'Table' member (no-member)
Run Code Online (Sandbox Code Playgroud)
我修复了这个,忽略了SQLAlchemy上的成员属性检查:
ignored-classes=SQLAlchemy
Run Code Online (Sandbox Code Playgroud)
但是我对实体上的查询成员有问题:
Class 'UserToken' has no 'query' member (no-member)
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,而不必忽略每个查询调用上的无成员错误?
烧瓶引导:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
app = Flask(__name__)
db.init_app(app)
app.run()
Run Code Online (Sandbox Code Playgroud)
UserToken实体:
from app import db
class UserToken(db.Model):
user_token_id = db.Column(db.Integer, primary_key=True, index=True)
token_auth = db.Column(db.String(64), unique=True, nullable=False, index=True)
Run Code Online (Sandbox Code Playgroud)
控制器:
from entities import UserToken
token = UserToken.query.filter(
UserToken.token_auth == token_hash,
).first()
Run Code Online (Sandbox Code Playgroud) 为了测试,我将MYSQL(RDS)参数修改如下;
wait_timeout = 40(默认为 28800)
max_allowed_packet = 1GB(最大 - 只是为了确保问题不是由小数据包引起的)
net_read_timeout = 10
Interactive_timeout 不变
然后在没有pool_pre_ping设置选项的情况下测试我的应用程序(默认为 False),使应用程序保持非活动状态 40 秒,尝试登录,然后我得到
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: Traceback (most recent call last):
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: File "/var/www/api_server/venv/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: context)
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: File "/var/www/api_server/venv/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 507, in do_execute
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: cursor.execute(statement, parameters)
Nov 14 20:05:20 ip-172-31-33-52 gunicorn[16962]: File "/var/www/api_server/venv/lib/python3.6/site-packages/MySQLdb/cursors.py", line 206, in execute
Nov 14 20:05:20 …Run Code Online (Sandbox Code Playgroud) 我在查询如何在查询中进行"大于或等于"比较时遇到了麻烦.
我有一个模型领域:
invoicedate = db.Column(db.Date(), nullable=True, key='InvoiceDate')
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行以下过滤器:
Invoice.query.filter_by(invoicedate >= date.today()).count()
Run Code Online (Sandbox Code Playgroud)
当我运行视图时,它不断抛出以下错误:
NameError: global name 'invoicedate' is not defined
Run Code Online (Sandbox Code Playgroud)
sqlalchemy或flask-sqlalchemy中大于或等于过滤器的正确语法是什么?
非常感谢 :)
我正在尝试使用Flask创建一个Web应用程序,让用户上传文件并将其提供给其他用户.现在,我可以正确地将文件上传到upload_folder.但我似乎找不到让用户下载它的方法.
我将文件名的名称存储到数据库中.
我有一个服务于数据库对象的视图.我也可以删除它们.
@app.route('/dashboard', methods=['GET', 'POST'])
def dashboard():
problemes = Probleme.query.all()
if 'user' not in session:
return redirect(url_for('login'))
if request.method == 'POST':
delete = Probleme.query.filter_by(id=request.form['del_button']).first()
db.session.delete(delete)
db.session.commit()
return redirect(url_for('dashboard'))
return render_template('dashboard.html', problemes=problemes)
Run Code Online (Sandbox Code Playgroud)
在我的HTML中我有:
<td><a href="{{ url_for('download', filename=probleme.facture) }}">Facture</a></td>
Run Code Online (Sandbox Code Playgroud)
和下载视图:
@app.route('/uploads/<path:filename>', methods=['GET', 'POST'])
def download(filename):
return send_from_directory(directory=app.config['UPLOAD_FOLDER'], filename=filename)
Run Code Online (Sandbox Code Playgroud)
但它正在回归:
未找到
在服务器上找不到请求的URL.如果您手动输入了URL,请检查拼写,然后重试.
我只想将文件名链接到对象并让用户下载它(对于同一视图中的每个对象)
我有一个我用Flask SQLAlchemy和SQLite构建的网站,需要切换到MySQL.我已经迁移了数据库并让它在MySQL下运行,但是
SQLALCHEMY_DATABASE_URI应该是什么)和我怀疑(1)是相当简单的,只是显示如何映射,例如,我在我的MySQL数据库工具中使用的连接对话框的内容到适当格式化的URL.但我担心(2),我曾假设SQLAlchemy提供了一个抽象层,以便简单的SQLAlchemy代码如
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email):
self.username = username
self.email = email
def __repr__(self):
return '<User %r>' % self.username
admin = User('admin', 'admin@example.com')
db.session.add(admin)
User.query.all()
User.query.filter_by(username='admin').first()
Run Code Online (Sandbox Code Playgroud)
除了对数据库URI的适当更改之外,没有任何修改的工作; 但我发现使用SQLAlchemy和MySQL 的例子似乎使用了完全不同的API.
我是否可以(2)通过简单地更改数据库URI来迁移我的Flask SQLAlchemy代码以使用MySQL数据库,如果是这样(1)该URI应该是什么?
我正在遵循flask-sqlalchemy教程,宣布关于一对多关系的模型.示例代码如下:
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
addresses = db.relationship('Address', backref='person',
lazy='dynamic')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何使用这样的模型将新记录插入到DB中.我假设我需要一个构造函数init,但我很难理解它应该如何实现和使用.我这里的主要问题是Person依赖于地址和地址有ForeignKey to Person,所以它应该提前知道Person.
Plase帮助我理解它应该如何执行.
先感谢您.
python sqlalchemy foreign-keys relationship flask-sqlalchemy
flask-sqlalchemy ×10
python ×8
flask ×6
sqlalchemy ×6
mysql ×2
alembic ×1
database ×1
download ×1
foreign-keys ×1
many-to-many ×1
orm ×1
postgresql ×1
pylint ×1
python-3.x ×1
relationship ×1
sqlite ×1