标签: flask-sqlalchemy

多个order_by sqlalchemy/Flask

我正在使用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上优先订购.

非常感谢你!

postgresql sqlalchemy flask flask-sqlalchemy

44
推荐指数
3
解决办法
3万
查看次数

flask sqlalchemy查询不等于的列

我可以在座位表中查询没有分配邀请的所有座位:

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)

如何查询所有者不为空的所有座位?

谢谢

python sqlalchemy flask flask-sqlalchemy

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

在flask-migrate或alembic迁移中创建种子数据

如何在第一次迁移中插入一些种子数据?如果迁移不是最好的地方,那么最佳做法是什么?

"""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)

python flask flask-sqlalchemy alembic flask-migrate

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

SQLAlchemy ManyToMany具有附加字段的辅助表

我有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)

python orm many-to-many sqlalchemy flask-sqlalchemy

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

Pylint找不到SQLAlchemy查询成员

我有一个使用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)

python sqlalchemy pylint python-3.x flask-sqlalchemy

42
推荐指数
10
解决办法
3万
查看次数

flask_sqlalchemy `pool_pre_ping` 有时只工作

为了测试,我将MYSQL(RDS)参数修改如下;

wait_timeout = 40(默认为 28800)

max_allowed_pa​​cket = 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)

python mysql connection-pooling flask flask-sqlalchemy

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

Flask-SQLAlchemy - 大于或等于

我在查询如何在查询中进行"大于或等于"比较时遇到了麻烦.

我有一个模型领域:

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中大于或等于过滤器的正确语法是什么?

非常感谢 :)

sqlalchemy flask flask-sqlalchemy

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

Flask下载文件

我正在尝试使用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,请检查拼写,然后重试.

我只想将文件名链接到对象并让用户下载它(对于同一视图中的每个对象)

python download flask flask-sqlalchemy

39
推荐指数
4
解决办法
9万
查看次数

使用Flask SQLAlchemy从SQLite切换到MySQL

我有一个我用Flask SQLAlchemy和SQLite构建的网站,需要切换到MySQL.我已经迁移了数据库并让它在MySQL下运行,但是

  1. 无法弄清楚如何连接到MySQL数据库(即SQLALCHEMY_DATABASE_URI应该是什么)和
  2. 我不清楚我现有的任何SQLAlchemy SQLite代码是否适用于MySQL.

我怀疑(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应该是什么?

python mysql database sqlite flask-sqlalchemy

38
推荐指数
2
解决办法
5万
查看次数

在sqlalchemy中插入具有一对多关系的新记录

我正在遵循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

37
推荐指数
2
解决办法
3万
查看次数