对于使用sqlalchemy查询使用多列的in子句感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍sql语句怎么用in查多个,并为您提供关于Flask(web)使用sqlalchemy查看sql
对于使用sqlalchemy查询使用多列的in子句感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍sql语句怎么用in查多个,并为您提供关于Flask(web)使用sqlalchemy查看sql语句的性能、flask-sqlalchemy – 在错误的Flask中使用SQLAlchemy,没有这样的表、python – SQLAlchemy查询返回无、python – 为什么人们使用sqlalchemy CORE来保存数据并使用sqlalchemy ORM来查询数据的有用信息。
本文目录一览:- 使用sqlalchemy查询使用多列的in子句(sql语句怎么用in查多个)
- Flask(web)使用sqlalchemy查看sql语句的性能
- flask-sqlalchemy – 在错误的Flask中使用SQLAlchemy,没有这样的表
- python – SQLAlchemy查询返回无
- python – 为什么人们使用sqlalchemy CORE来保存数据并使用sqlalchemy ORM来查询数据
使用sqlalchemy查询使用多列的in子句(sql语句怎么用in查多个)
我正在寻找使用sqlalchemy执行此查询。
SELECT name, age, favorite_color, favorite_foodFROM kindergarten_classroomWHERE (favorite_color, favorite_food) IN ((''lavender'',''lentil soup''),(''black'',''carrot juice''));
我只想要喜欢(薰衣草和扁豆汤)或(黑胡萝卜汁)的孩子。另外,这可能是大量喜欢的颜色和食物的列表(可能> 10K),因此,我想分批进行。
答案1
小编典典您需要tuple_
构造:
session.query(...).filter( tuple_(favorite_color, favorite_food).in_( [(''lavender'', ''lentil soup''), (''black'', ''carrot juice'')] ))
Flask(web)使用sqlalchemy查看sql语句的性能
如果程序性能随着时间推移不断降低,那很有可能是因为数据库查询变慢了,随着数据库规模的增长,这一情况还会变得更加严重。普通优化其实很简单,只需添加合适的索引,不过在开始优化查询之前,我们必须知道那些查询是值得优化的。可以在数据库中explain对应查询语句但是这样实在太慢而且让人感觉恶心,这时就完全可以使用Flask的请求钩子函数配合sqlalchemy进行查询语句的相关统计。
from flask.ext.sqlalchemy import get_debug_queries
@app.after_request
def af_request(response):
for query in get_debug_queries():
if query.duration >= current_app.config[''FALSK_SLOW_DB_QUERY_TIME'']:
current_app.logger.warning(
''Slow query: %s\nParameters: %s\nDuration: %fs\nContext:
%s\n'' %(query.statement, query.parameters, query.duration,
query.context)
)
return response
这个功能使用after_app_requestq请求钩子实现的,在视图函数处理完成之后执行。Flask把响应对象传给after_app_request处理程序,以防修改响应。
本例中after_app_request只是获取flak_sqlalchemy记录的查询时间并把运行缓慢的的查询写入日志。
默认情况下,get_debug_queries()函数只在调试模式中可用。
flask-sqlalchemy – 在错误的Flask中使用SQLAlchemy,没有这样的表
if __name__ == '__main__': config() app.run()
main.py
import database app = Flask(__name__) def config(): app.config.from_object('config.DevConfig') # Run sqlAlchemy _that uses app.config_ and add entities if in DEBUG mode database.init_db(app) import blueprints.auth app.register_blueprint(blueprints.auth.auth)
database.py
db = None def init_db(app): global db db = sqlAlchemy(app) from models import User,Interest,Event if app.config['DEBUG']: print 'Recreating all db' db.create_all() # I DO create everything print 'Loading test data' ... (here I add some Users and etc. and everything works fine - tests pass)
models.py
from database import db 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) ...
蓝图/ auth.py
from models import User auth = Blueprint('auth',__name__) @auth.route('/') def index(): return str(User.query.get(1).interests)
所以我明白了
OperationalError: (OperationalError) no such table: user u'SELECT user.id AS user_id,user.username AS user_username,user.email AS user_email,user.passhash AS user_passhash,user.vk_page AS user_vk_page \nFROM user \nWHERE user.id = ?' (1,)
我究竟做错了什么?
解决方法
>在config中用sqlALCHEMY_DATABASE_URI参数替换DATABASE_URI
> replace:memory:带/tmp/test.db的sqlite地址
现在它工作正常.
python – SQLAlchemy查询返回无
我在我的ubuntu 16& 16上有一个使用sqlAlchemy和MySQL-server的Web应用程序. Nginx uwsgi.
在创建引擎的同时,我放了
echo=True
获取查询的跟踪.我有注册用户的问题,每次在flask登录时调用user_loader,我执行:
dbsession.query(User).filter_by(id=user_id).first()
我得到的结果是:
INFO sqlalchemy.engine.base.Engine SELECT user.id AS user_id, user.name AS user_name, user.email AS user_email, user.pass$
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: FROM user
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: WHERE user.id = %s
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: LIMIT %s
Mar 29 23:48:56 ubuntu-512mb-sgp1-01 uwsgi[26160]: 2017-03-29 23:48:56,517 INFO sqlalchemy.engine.base.Engine ('61', 1)
结果是无.但是,在上面的例子中,使用user_id = 61,我可以在ubuntu中的MysqL shell上找到用户获取用户ID 61.
当我刷新页面几次,结果就会出来.
一旦用户完成注册,他们将被重定向到登录页面,在完成表单后,它会显示错误“请注册”,如果现在使用此查询找到用户,则会触发该错误:
dbsession.query(User).filter_by(id=user_id).first()
在注册时我的代码是:
user = User(name=name, email=email, password=password)
dbsession.add(user)
dbsession.commit()
return redirect(url_for('login'))
检查已完成,以确保名称,电子邮件密码有效.
谢谢
解决方法:
解决了这个问题.
感谢@iljaEverila.
基本上我需要确保来自sqlAlchemy的dbsession已经持久保存数据并且没有待处理的事务.因此,一旦用户注册并调用user_loader,我只需要调用:
dbsession.commit()
然后调用这个:
dbsession.query(User).filter_by(id=user_id).first()
会成功的.
谢谢
python – 为什么人们使用sqlalchemy CORE来保存数据并使用sqlalchemy ORM来查询数据
sqlalchemy ORM最终将转换为CORE,对吧?同时使用核心和orm,是否使程序更快?我在这里找到一句话(What is the difference between sqlalchemy core and ORM?)
particularly based on information only available at runtime
这是否意味着CORE更快还是什么?我真的很困惑.任何人都可以提前帮助,谢谢.
解决方法
虽然ORM确实构建在Core之上,但它不仅仅是简单的“将这些对象保存到数据库”.它跟踪会话中对象的更改,并定期将这些挂起的更改刷新到DB.这是unit of work模式的一部分.所有这些书籍都需要付出代价,但作为回报,在将复杂对象图持久存入关系数据库时,您不必担心操作顺序.有时您不需要所有这些并且只想将一堆行插入到数据库中.
我们今天的关于使用sqlalchemy查询使用多列的in子句和sql语句怎么用in查多个的分享已经告一段落,感谢您的关注,如果您想了解更多关于Flask(web)使用sqlalchemy查看sql语句的性能、flask-sqlalchemy – 在错误的Flask中使用SQLAlchemy,没有这样的表、python – SQLAlchemy查询返回无、python – 为什么人们使用sqlalchemy CORE来保存数据并使用sqlalchemy ORM来查询数据的相关信息,请在本站查询。
本文标签: