動的に問合せを作成できます。たとえば、あなたが行うことができます:
query = select([table])
for key, value in params.iteritems():
query = query.where(table.columns[key] == value)
print conn.execute(query).fetchall()
をparams
は、{'column': 'value'}
などの制限だけの辞書です。これにより、のすべてが句とANDで連結されたクエリが生成されます。もちろん、より複雑なものが必要な場合の句は、クエリの構築が少し難しい場合があります。
作業例:
from sqlalchemy import select
from sqlalchemy import create_engine
from sqlalchemy import Column, String, Integer
from sqlalchemy.schema import MetaData, Table
# create engine and connection
DB_URI = "mysql+mysqldb://username:[email protected]:3306/database?charset=utf8mb4"
engine = create_engine(DB_URI, convert_unicode=True, echo=False)
conn = engine.connect()
# create table
metadata = MetaData()
pieces_table = Table('pieces', metadata,
Column('id', Integer, primary_key=True),
Column('size', String(60)),
Column('color', String(60)),
)
metadata.create_all(engine)
# insert data
conn.execute(pieces_table.insert(), [
{'size': 'small', 'color': 'blue'},
{'size': 'large', 'color': 'blue'},
{'size': 'small', 'color': 'red'},
])
# query data
def build_query(table, params):
query = select([table])
for key, value in params.iteritems():
query = query.where(table.columns[key] == value)
return query
params = {
'size': 'large',
'color': 'blue',
}
query = build_query(pieces_table, params)
print conn.execute(query).fetchall()
あなたがやって、どのようにしているものに依存したいです。一般的には、あなたが 'Select'sを渡して[' where() '](http://docs.sqlalchemy.org/en/latest/core/selectable.html#sqlalchemy.sql.expression.Select必要に応じて。このようなディクテーションを使用する場合は、[literal_column() '](http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.literal_column)が便利です説明する。 –