如何在SQLAlchemy中执行原始SQL?
我有一个python web应用程序,它运行在烧瓶上,并通过SQLAlchemy与数据库连接.
我需要一种方法来运行原始SQL.该查询涉及多个表连接以及内联视图.
我试过了:
connection = db.session.connection()
connection.execute( <sql here> )
Run Code Online (Sandbox Code Playgroud)
但我不断收到网关错误.
每次我运行使用Flask-SQLAlchemy的应用程序时,都会收到以下警告:该SQLALCHEMY_TRACK_MODIFICATIONS选项将被禁用.
/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.5/site-packages/flask_sqlalchemy/__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.
warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.')
Run Code Online (Sandbox Code Playgroud)
我试图找出这个选项的作用,但Flask-SQLAlchemy文档并不清楚使用此跟踪的内容.
SQLALCHEMY_TRACK_MODIFICATIONS如果设置为True(默认值),Flask-SQLAlchemy将跟踪对象的修改并发出信号.这需要额外的内存,如果不需要可以禁用.
如何确定我的项目是否需要,SQLALCHEMY_TRACK_MODIFICATIONS = True或者我是否可以安全地禁用此功能并在我的服务器上保存内存?
我正在尝试在Flask/Python中jsonify一个SQLAlchemy结果集.
Flask邮件列表建议采用以下方法:http://librelist.com/browser//flask/2011/2/16/jsonify-sqlalchemy-pagination-collection-result/#04a0754b63387f87e59dda564bde426e:
return jsonify(json_list = qryresult)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
TypeError: <flaskext.sqlalchemy.BaseQuery object at 0x102c2df90>
is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
我在这里俯瞰什么?
我发现了这个问题:如何将SqlAlchemy结果序列化为JSON?这看起来非常相似但是我不知道Flask是否有一些魔力使其更容易,如邮件列表帖子所示.
编辑:为了澄清,这就是我的模型
class Rating(db.Model):
__tablename__ = 'rating'
id = db.Column(db.Integer, primary_key=True)
fullurl = db.Column(db.String())
url = db.Column(db.String())
comments = db.Column(db.Text)
overall = db.Column(db.Integer)
shipping = db.Column(db.Integer)
cost = db.Column(db.Integer)
honesty = db.Column(db.Integer)
communication = db.Column(db.Integer)
name = db.Column(db.String())
ipaddr = db.Column(db.String())
date = db.Column(db.String())
def __init__(self, fullurl, url, comments, overall, shipping, cost, honesty, communication, name, ipaddr, date): …Run Code Online (Sandbox Code Playgroud) 假设表有三列:username,password和no_of_logins.
当用户尝试登录时,会检查具有类似查询的条目
user = User.query.filter_by(username=form.username.data).first()
Run Code Online (Sandbox Code Playgroud)
如果密码匹配,他继续前进.我想要做的是计算用户登录的次数.因此,每当他成功登录时,我想增加该no_of_logins字段并将其存储回用户表.我不知道如何使用SqlAlchemy运行更新查询.
我想构建我的Flask应用程序,例如:
./site.py
./apps/members/__init__.py
./apps/members/models.py
Run Code Online (Sandbox Code Playgroud)
apps.members 是一个Flask蓝图.
现在,为了创建模型类,我需要掌握应用程序,例如:
# apps.members.models
from flask import current_app
from flaskext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(current_app)
class Member(db.Model):
# fields here
pass
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将该模型导入我的Blueprint应用程序,我会感到害怕RuntimeError: working outside of request context.我怎样才能正确掌握我的应用程序?相对导入可能有效,但它们非常丑陋且有自己的上下文问题,例如:
from ...site import app
# ValueError: Attempted relative import beyond toplevel package
Run Code Online (Sandbox Code Playgroud) users我的MySql数据库中有表.这个表有id,name而且age领域.
我怎样才能删除一些记录id?
现在我使用以下代码:
user = User.query.get(id)
db.session.delete(user)
db.session.commit()
Run Code Online (Sandbox Code Playgroud)
但我不想在删除操作之前进行任何查询.有没有办法做到这一点?我知道,我可以使用db.engine.execute("delete from users where id=..."),但我想使用delete()方法.
谢谢!
如何使用模型在查询中指定我想要的列(默认选择所有列)?我知道如何使用sqlalchmey会话:session.query(self.col1)但是我如何使用模型?我做不到SomeModel.query().有办法吗?
如何更新行的信息?
例如,我想更改id为5的行的name列.
这个主题暂时没有在这里或其他地方得到解决.有没有将SQLAlchemy <Query object>转换为pandas DataFrame 的解决方案?
Pandas有能力使用,pandas.read_sql但这需要使用原始SQL.我有两个理由想要避免它:1)我已经拥有使用ORM的一切(这本身就是一个很好的理由)和2)我使用python列表作为查询的一部分(例如:我的模型类.db.session.query(Item).filter(Item.symbol.in_(add_symbols)在哪里Item并且add_symbols是一个列表).这相当于SQL SELECT ... from ... WHERE ... IN.
有可能吗?
我正在使用Flask-SQLAlchemy从用户数据库中进行查询; 然而,同时
user = models.User.query.filter_by(username="ganye").first()
Run Code Online (Sandbox Code Playgroud)
将返回
<User u'ganye'>
Run Code Online (Sandbox Code Playgroud)
干
user = models.User.query.filter_by(username="GANYE").first()
Run Code Online (Sandbox Code Playgroud)
回报
None
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法以不区分大小写的方式查询数据库,因此第二个示例仍将返回
<User u'ganye'>
Run Code Online (Sandbox Code Playgroud)