相关疑难解决方法(0)

SQLAlchemy过滤in_运算符

我试图对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)

python sqlite sqlalchemy

17
推荐指数
2
解决办法
4万
查看次数

新/重写SQLAlchemy运算符编译器输出

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)

python sqlalchemy

5
推荐指数
1
解决办法
152
查看次数

SQLAlchemy 和 RAW SQL:列表作为输入

我正在使用 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 参数插入元组和列表,但没有任何效果。我要么得到:

  • Python 'tuple' 不能转换为 MySQL 类型 args = tuple([1, 2, 3])
  • Python 'list' 无法转换为 MySQL 类型,使用时 args = [1, 2, 3]


您如何使用 SQLAlchemy 从列表中读取并使用 RAW SQL 和参数作为输入?

python mysql sqlalchemy flask flask-sqlalchemy

3
推荐指数
1
解决办法
4005
查看次数

SqlAlchemy 在 where 子句中包含列表

我在数据库中的表如下

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)

python sqlalchemy psycopg2 list bindparam

1
推荐指数
1
解决办法
3746
查看次数