GVKun编程网logo

使用sqlalchemy查询使用多列的in子句(sql语句怎么用in查多个)

18

对于使用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查多个)

使用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语句的性能

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,没有这样的表

flask-sqlalchemy – 在错误的Flask中使用SQLAlchemy,没有这样的表

run.py

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查询返回无

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来查询数据

python – 为什么人们使用sqlalchemy CORE来保存数据并使用sqlalchemy ORM来查询数据

我发现有些人使用sqlalchemy ORM来查询数据,但是使用sqlalchemy CORE来插入数据.为什么他们这样做?为什么他们不在一个 Python代码(类)中保持一致?

sqlalchemy ORM最终将转换为CORE,对吧?同时使用核心和orm,是否使程序更快?我在这里找到一句话(What is the difference between sqlalchemy core and ORM?)

particularly based on information only available at runtime

这是否意味着CORE更快还是什么?我真的很困惑.任何人都可以提前帮助,谢谢.

解决方法

您应该在文档中查看 this performance comparison and explanation.基本上它解释了ORM如何以及为什么不适合Core可能处理的大型批量插件.会议中也有 bulk operations,但他们有权衡.

虽然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来查询数据的相关信息,请在本站查询。

本文标签: