Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy查询动态字段_Python_Sql_Database_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy查询动态字段

Python SQLAlchemy查询动态字段,python,sql,database,sqlalchemy,Python,Sql,Database,Sqlalchemy,我有一个有很多列的表-- 我可以在不手动指定每个列名的情况下单独查询所有列吗-- 谢谢。您可以遍历表中的列。首先,表格: from sqlalchemy.orm.attributes import manager_of_class dummy_table = manager_of_class(Dummy).mapper.mapped_table 最后是查询 for col in dummy_table.columns: dummy = session.query(Dummy).filt

我有一个有很多列的表--

我可以在不手动指定每个列名的情况下单独查询所有列吗--


谢谢。

您可以遍历表中的列。首先,表格:

from sqlalchemy.orm.attributes import manager_of_class
dummy_table = manager_of_class(Dummy).mapper.mapped_table
最后是查询

for col in dummy_table.columns:
    dummy = session.query(Dummy).filter(col == 0).first()
或者,您实际上是从一个比您显示的更复杂的函数生成一组特定的列。在这种情况下,请使用
getattr
。不,真的

for i in range(1, N):
    c_name = 'c%d' % i
    dummy = DBSession().query(Dummy).filter(getattr(Dummy, c_name) == 0).first()

使用此模式表示可能没有足够的列。最好再加一些。严重的是,这种反模式指示您应该考虑将列列表分解为一个新表,外键返回到哑表、列值,并且可能是一个使项目保持有序的索引。这也会使查询变得更容易。谢谢你,先生,我严重低估了SQLAlchemy的灵活性,应该亲自测试getattr。至于数据库设计,我们可以说这种类似NoSQL的效率在某些情况下是合理的。我不知道,与只有一个索引的内部连接相比,有N个查询的N个索引可以降低速度。当您向数据库提出正确的问题时,即使是读重访问模式也能很好地工作。
for col in dummy_table.columns:
    dummy = session.query(Dummy).filter(col == 0).first()
for i in range(1, N):
    c_name = 'c%d' % i
    dummy = DBSession().query(Dummy).filter(getattr(Dummy, c_name) == 0).first()