Постоянный, где пункт SQLAlchemy - PullRequest
1 голос
/ 25 марта 2011

Я пытаюсь добавить постоянный оператор SQL где SQLalchimy. По сути, у меня есть таблица, содержащая определенное поле, и я хочу, чтобы все мои запросы добавляли предложение where, поэтому это поле соответствует предложению.

Например, если мой запрос

session.query( MyTable ).all()

Я бы хотел, чтобы сгенерированный запрос был таким:

SELECT * FROM Table WHERE specific_field = 'some_value';

Есть ли способ сделать это без добавления фильтра к каждому запросу?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Если вы добавите:

dbengine.echo = True
session.query(MyTable).filter_by(specified_field = 'some_value').all()

Я не уверен, что вы подразумеваете под «без добавления фильтра к каждому запросу».Я предполагаю, что вы не хотите фильтровать запрос на стороне клиента.Сгенерированный SQL для этого должен выглядеть очень похоже на то, что вы просите;бит dbengine.echo = True покажет вам сгенерированный SQL.

Обновление на основе комментария OP:

Если вы действительно хотите, чтобы все запросы имели фильтр, тогдаПростым (но, на мой взгляд, не очень красивым) способом было бы добавить собственный метод запроса:

def myquery(self, table):
  self.query(table).filter_by(specified_field = 'some_value')

session.__class__.some_arbitrarily_filtered_query = myquery

После этого вы можете просто позвонить (например):

session.some_arbitrarily_filtered_query(MyTable).all()
0 голосов
/ 25 марта 2011

Я не действительно предлагаю это, потому что это слишком сложно, но ...

CREATE VIEW Table2 AS SELECT * FROM Table WHERE specific_field = 'some_value';

тогда вы отражаете вид с помощью

table2 = sqlalchemy.Table('Table2', metadata, autoload=True)

ипросто запросите там, возможно сопоставив его (также предоставив первичный ключ) с

class MyTable2(MyTable):
    pass

непроверенным, но должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...