我试图对sqlalchemy中的查询进行简单的过滤操作,如下所示:
q = session.query(Genotypes).filter(Genotypes.rsid.in_(inall))
Run Code Online (Sandbox Code Playgroud)
哪里
inall是一个字符串列表基因型映射到一个表:class Genotypes(object):pass
Genotypes.mapper = mapper(Genotypes, kg_table, properties={'rsid': getattr(kg_table.c, 'rs#')})
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很简单,但是当我通过执行以下操作执行上述查询时出现以下错误q.first():
"sqlalchemy.exc.OperationalError:(OperationalError)太多的SQL变量u'SELECT"随后在1M的项目列表inall 列表.但它们不应该是SQL变量,只是一个列表,其成员资格是过滤条件.
我不正确地进行过滤吗?
(db是sqlite)
in_对于非常大的列表,用于编译表达式的默认SQLAlchemy行为是病理性的,我想为运算符创建一个自定义,更快的编译器。解决方案是新运算符(例如in_list_)还是覆盖的默认编译器,对于应用程序都没有关系in_。但是,我还没有找到有关如何执行此操作的任何文档。
编译扩展的子类准则不包含任何有关运算符的内容,这表明这不是一个开始的地方。重新定义和创建新运算符的文档着重于更改或创建新运算符的行为,但是运算符的行为不是问题,而仅仅是编译器。
这是我要完成的工作的非常不可行的示例:
from sqlalchemy.types import TypeEngine
class in_list_(TypeEngine.Comparator):
pass
@compiles(in_list_)
def in_list_impl(element, compiler, **kwargs):
return "IN ('Now', 'I', 'can', 'inline', 'the', 'list')"
Run Code Online (Sandbox Code Playgroud)
然后在表达式中:
select([mytable.c.x, mytable.c.y]).where(mytable.c.x.in_list_(long_list))
Run Code Online (Sandbox Code Playgroud) 我正在使用 Flask-SQLAlchemy,但在 SQL 语法中的 IN 子句中遇到了一些问题。我希望我的 IN 子句“读取”的数据是一个包含一些数据的列表,例如
args = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
这是我的代码的样子。
connection = db.session.connection()
raw_sql = text("""
SELECT
*
FROM
table
WHERE data IN :list
""")
query = connection.engine.execute(raw_sql, {'list' : args})
Run Code Online (Sandbox Code Playgroud)
我试过给 args 参数插入元组和列表,但没有任何效果。我要么得到:
args = tuple([1, 2, 3])args = [1, 2, 3]
您如何使用 SQLAlchemy 从列表中读取并使用 RAW SQL 和参数作为输入?
我在数据库中的表如下
Username city Type
Anna Paris abc
Marc london abc
erica rome AF
Sara Newyork cbd
silvia paris AD
Run Code Online (Sandbox Code Playgroud)
我有一个包含字符串值的列表
typelist = {'abc', 'cbd'}
Run Code Online (Sandbox Code Playgroud)
我想使用 sqlalchemy 查询数据库,从列类型等于列表中的值的表中获取数据:
Username city Type
Anna Paris abc
Marc london abc
Sara Newyork cbd
Run Code Online (Sandbox Code Playgroud)
我正在尝试这段代码
sql = "SELECT * FROM table WHERE data IN :values"
query = sqlalchemy.text(sql).bindparams(values=tuple(typelist))
conn.engine.execute(query)
Run Code Online (Sandbox Code Playgroud)
但它只返回类型列表中的一个值,而不是所有列表值。
Username city Type
Sara Newyork cbd
Run Code Online (Sandbox Code Playgroud)