标签: flask-sqlalchemy

使用关键字作为变量的flask sqlalchemy查询

假设我有一个这样的模型:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    hometown = db.Column(db.String(140))
    university = db.Column(db.String(140))
Run Code Online (Sandbox Code Playgroud)

要获取纽约的用户列表,这是我的查询:

User.query.filter_by(hometown='New York').all()
Run Code Online (Sandbox Code Playgroud)

要获取前往USC的用户列表,这是我的查询:

User.query.filter_by(university='USC').all()
Run Code Online (Sandbox Code Playgroud)

要获得纽约的用户列表,以及谁去USC,这是我的查询:

User.query.filter_by(hometown='New York').filter_by(university='USC').all()
Run Code Online (Sandbox Code Playgroud)

现在,我想根据变量的值动态生成这些查询.

例如,我的变量可能如下所示:

    {'hometown': 'New York'}
Run Code Online (Sandbox Code Playgroud)

或者像这样:

    {'university': 'USC'}
Run Code Online (Sandbox Code Playgroud)

......或者甚至是这样的:

    [{'hometown': 'New York'}, {'university': 'USC'}]
Run Code Online (Sandbox Code Playgroud)

你可以帮我编写一个以字典(或字典列表)作为输入的函数,然后动态构建正确的sqlalchemy查询吗?

如果我尝试为关键字使用变量,我得到这个错误:

key = 'university'
User.query.filter_by(key='USC').all()

InvalidRequestError: Entity '<class 'User'>' has no property 'key'
Run Code Online (Sandbox Code Playgroud)

其次,我不确定如何动态地将多个filter_by表达式链接在一起.

我可以明确地调出一个filter_by表达式,但是如何根据变量将几个链接在一起呢?

希望这更有意义.

谢谢!

python sql sqlalchemy flask flask-sqlalchemy

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

使用SQLAlchemy进行PostgreSQL ILIKE查询

我想运行一个查询,选择所有匹配标题的帖子,不区分大小写'%' + [some_phrase] + '%'.也就是说,选择具有包含某些短语的标题的所有行,不区分大小写.从我所做的研究来看,我看起来需要使用Postgres的ILIKE查询来匹配不区分大小写.如何使用SQLAlchemy执行这样的查询?

class Post(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(250))
    content = db.Column(db.String(5000))
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy flask flask-sqlalchemy

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

SQLAlchemy对象已附加到会话

我正在尝试为应用程序运行服务器,但我在登录时遇到错误:

[!] Object '<User at 0x7f12bc185a90>' is already attached to session '2' (this is '3')
Run Code Online (Sandbox Code Playgroud)

我正在添加的会话似乎已经存在于数据库中.这是导致问题的代码片段:

@app.route('/login', methods=['POST'])
def login():
    u = User.query.filter(User.username == request.form["username"]).first()
    if not u or u.password != request.form["password"]:
        return error("E1")

    s = Session.get_by_user(u)
    if s is not None:
         db_session.delete(s)
         db_session.commit()

     print db_session.execute("SELECT * FROM sessions").fetchall()

     s = Session(u)
     db_session.add(s)
     db_session.commit()

     return jsonify(s.values)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我在尝试添加任何内容之前从会话表中打印内容,它是空的!([])

还有什么可能导致这个?

这是"会话"实施:

class Session(Base):
__tablename__ = "sessions"
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'), unique=True)
user = relationship(User)
key = Column(String(50), unique=True) …
Run Code Online (Sandbox Code Playgroud)

python session sqlalchemy python-2.7 flask-sqlalchemy

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

celery,flask sqlalchemy:DatabaseError:(DatabaseError)SSL错误:解密失败或错误记录mac

嗨,我有一个设置,我正在使用Celery Flask SqlAlchemy,我间歇性地收到此错误:

 (psycopg2.DatabaseError) SSL error: decryption failed or bad record mac
Run Code Online (Sandbox Code Playgroud)

我关注这篇文章:

Celery + SQLAlchemy:DatabaseError:(DatabaseError)SSL错误:解密失败或错误记录mac

还有一些,并添加了prerun和postrun方法:

@task_postrun.connect
def close_session(*args, **kwargs):
    # Flask SQLAlchemy will automatically create new sessions for you from 
    # a scoped session factory, given that we are maintaining the same app
    # context, this ensures tasks have a fresh session (e.g. session errors 
    # won't propagate across tasks)
    d.session.remove()

@task_prerun.connect
def on_task_init(*args, **kwargs):
    d.engine.dispose()
Run Code Online (Sandbox Code Playgroud)

但我仍然看到这个错误.有人解决了吗?

请注意,我在AWS上运行它(两个服务器访问相同的数据库).数据库本身托管在自己的服务器(而不是RDS)上.我相信总的芹菜背景任务是6(2 + 4).Flask前端使用gunicorn运行.

我的相关主题:https: //github.com/celery/celery/issues/3238#issuecomment-225975220

sqlalchemy celery python-2.7 flask-sqlalchemy

14
推荐指数
1
解决办法
1031
查看次数

Sqlalchemy如何过滤包含Null和整数值的列

我有一个可以为空的列的表,其中包含两种类型的值Null(默认值)和整数:

class Node(db.Model):
    __tablename__ = "node"
    maintenance = db.Column(db.Integer, nullable=True)
Run Code Online (Sandbox Code Playgroud)

请求就像这样:

maintenance = 1
node_list = Node.query.filter(Node.maintenance != maintenance).all()
Run Code Online (Sandbox Code Playgroud)

我需要选择包含Null0值的所有单元格.

先感谢您!

python flask flask-sqlalchemy

14
推荐指数
1
解决办法
7457
查看次数

对JSON字段的更新不会持久保存到DB

我们有一个带有JSON字段的模型,用户标志插入其中.插入确实按预期工作,但是当删除某些标志时,它们会保留在字段中,并且更改不会持久保存到数据库.

我们的模型中有以下方法:

def del_flag(self, key):
    if self.user_flags is None or not key in self.user_flags:
        return False
    else:
        del self.user_flags[key]
        db.session.commit()        
        return True
Run Code Online (Sandbox Code Playgroud)

数据库是postgres,我们使用SQLalchemy JSON字段方言作为字段类型.有什么建议吗?

python postgresql json sqlalchemy flask-sqlalchemy

14
推荐指数
3
解决办法
4848
查看次数

无法在Flask-admin上创建模型

我在Flask上创建了一个简单的博客,我正在尝试使用Flask-Admin来管理我的帖子.如果我去管理区域,我可以看到来自数据库的所有帖子的列表,但是当我尝试创建一个新帖子时,我得到了下一个错误:

Failed to create model. __init__() takes exactly 4 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

这是我的帖子模型:

class Post(db.Model):
    __tablename__ = 'news'
    nid = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)
    created_at = db.Column(db.DateTime)

    def __init__(self, title, content):
        self.title = title.title()
        self.content = content
        self.created_at = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)

这是我将模型添加到UI的代码:

from flask import Flask, session
from models import db, Post
from flask.ext.admin import Admin
from flask.ext.admin.contrib.sqlamodel import ModelView

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:pass@localhost/appname'
db.init_app(app)

admin = Admin(app)
admin.add_view(ModelView(Post, db.session))
Run Code Online (Sandbox Code Playgroud)

我可以通过管理面板编辑模型,但不能创建新模型.我知道我错过了一些非常愚蠢的东西,但我无法弄清楚它是什么.

编辑:如果我没有在模型上实现init …

python flask flask-sqlalchemy flask-extensions

13
推荐指数
1
解决办法
4239
查看次数

SQLAlchemy:如何在不将其作为主键的情况下创建整数列auto_increment(和unique)?

我正在使用Flask扩展来为SQLAlchemy定义我的数据库模型.我希望id列是int类型并具有auto_increment属性但不使其成为主键.我该如何实现?

我试过这个:

from flask import Flask, jsonify
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:ajay@localhost/pydb'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)

class Scenario(db.Model):
    scid = db.Column(db.Integer, nullable=False, unique=True, autoincrement=True)
    scenario_name = db.Column(db.String(100), primary_key=True)
    scenario_description = db.Column(db.String(200), nullable=False)
    image_id = db.Column(db.Integer, db.ForeignKey('images.id', onupdate='CASCADE', ondelete='CASCADE'))

    def __init__(self, scenario_name, scenario_description, image_id=None):
        self.scenario_name = scenario_name
        self.scenario_description = scenario_description
        self.image_id = image_id

    def __repr__(self):
        return '<Scenario %r, %r, %r>' % (self.scenario_name, self.scenario_description, self.image_id)
Run Code Online (Sandbox Code Playgroud)

但是这不会将scid列设置为auto_increment.

python mysql auto-increment flask flask-sqlalchemy

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

SQLAlchemy如何使用timezone = UTC加载日期(没有时区存储的日期)

我有一个模型,其日期列定义为:

created_on = db.Column(db.DateTime, default=db.func.now(), nullable=False)
Run Code Online (Sandbox Code Playgroud)

日期与tz_info = None,这是正确的,因为日期存储没有时区信息.

如果我打印日期:

print(my_object.created_on.isoformat())
Run Code Online (Sandbox Code Playgroud)

我得到这种格式

2014-04-26T17:46:27.353936
Run Code Online (Sandbox Code Playgroud)

我想要一个UTC时区指标,例如:

2014-04-26T17:46:27.353936Z
Run Code Online (Sandbox Code Playgroud)

有没有办法在架构配置中定义此行为?

SQLAlchemy有,timezone = Boolean

sqlalchemy.types.DateTime(时区=假)

因为我希望存储没有时区.

python sqlalchemy flask-sqlalchemy

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

Python Flask SQLAlchemy Pagination

我无法用Flask-SQLAlchemy或Flask-Pagination执行分页,或者.我不确定如何初始化分页,设置页面,确定页面,输入等等.我来自PHP,对Python来说很新.

我在查询数据库中的所有帖子

posts = Posts.query.order_by(Posts.time.desc()).all()
Run Code Online (Sandbox Code Playgroud)

我一直在看下面的例子:

我真的很困惑,我发现的信息在文章之间差别很大.这让我感到困惑,不知道从哪里开始.我想查询数据库表的所有行,将结果限制为20和分页.我没有清楚地看到这一点.

python sqlalchemy flask flask-sqlalchemy flask-wtforms

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