假设我有一个这样的模型:
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表达式,但是如何根据变量将几个链接在一起呢?
希望这更有意义.
谢谢!
我想运行一个查询,选择所有匹配标题的帖子,不区分大小写'%' + [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) 我正在尝试为应用程序运行服务器,但我在登录时遇到错误:
[!] 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) 嗨,我有一个设置,我正在使用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
我有一个可以为空的列的表,其中包含两种类型的值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)
我需要选择包含Null或0值的所有单元格.
先感谢您!
我们有一个带有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字段方言作为字段类型.有什么建议吗?
我在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 …
我正在使用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.
我有一个模型,其日期列定义为:
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(时区=假)
因为我希望存储没有时区.
我无法用Flask-SQLAlchemy或Flask-Pagination执行分页,或者.我不确定如何初始化分页,设置页面,确定页面,输入等等.我来自PHP,对Python来说很新.
我在查询数据库中的所有帖子
posts = Posts.query.order_by(Posts.time.desc()).all()
Run Code Online (Sandbox Code Playgroud)
我一直在看下面的例子:
我真的很困惑,我发现的信息在文章之间差别很大.这让我感到困惑,不知道从哪里开始.我想查询数据库表的所有行,将结果限制为20和分页.我没有清楚地看到这一点.
flask-sqlalchemy ×10
python ×9
sqlalchemy ×7
flask ×6
postgresql ×2
python-2.7 ×2
celery ×1
json ×1
mysql ×1
session ×1
sql ×1