Необработанный SQL в приложении Pylons, которое использует SQLAlchemy? - PullRequest
2 голосов
/ 20 сентября 2010

Я унаследовал приложение Pylons, которое использует SQLAlchemy. Я ничего не знаю о SQLAlchemy и очень мало о Pylons:)

Мне нужно запустить сырой SQL из приложения. Кажется, что SQLAlchemy в настоящее время работает следующим образом (пример кода):

import myapp.model as model
model.Session.query(model.KeyValue) # existing code
            .join(model.Key)
            .filter(model.Key.name == name)
            ).count() == 0, name

Как мне заставить его работать с сырым SQL? Я вижу, что мне нужен оператор execute (), но как именно его запустить? Следующие оба сбоя:

model.Session.execute('create table hello_world;')
model.Connection.execute("""
create table hello_world;
""")

Что за волшебство? В существующем коде нет ссылки на объект Connection, и я не уверен, как его создать.

Ответы [ 2 ]

8 голосов
/ 28 сентября 2010

Вы можете получить соединение, используемое Session, используя метод соединения :

connection = model.Session.connection()

Затем вы можете отправить запрос:

connection.execute('create table hello_world;')

Примечаниечто в модели Pylons.Session не является sqlalchemy.orm.session.Session class .Это экземпляр из sqlalchemy.orm.scoping.ScopedSession .Вот как это создается в модуле model.meta:

Session = scoped_session(sessionmaker())
1 голос
/ 20 сентября 2010

Мой первый импульс - рекомендовать попробовать метод execute () экземпляра Connection вместо метода execute () самого класса, как показывает пример вашего кода.

Вы работаете с примерами из Книги Пилонов ?

...