понедельник, 30 января 2012 г.

sqlalchemy

Sqlalchemy - фреймворк для работы с базами данных с технолгией ORM. Почитать про него можно тут. Моей задачей было понять, как использовать этот фреймворк в потоках.


import sqlalchemy
from sqlalchemy.orm import sessionmaker, scoped_session

connection = "mysql://root:@localhost/mydatabase"
# pool_size - указывает сколько запросов хранить в очереди, если будет больше, вылетит exception
engine = sqlalchemy.create_engine(connection, pool_size=30)
# Создаем объект Session и дальше во всех потоках используем только его.
Session = scoped_session(sessionmaker(bind=engine))

#Accounts - моя таблица, к которой мне нужно делать запросы, код по настройке отображения я опустил.
accounts = Session.query(Accounts)
account = accounts[0]

Один интересный момент, account, созданный в одном потоке и переданный в другой, изменить не получится.
Если мы поменяем атрибуты account в новом потоке и выполним Session.commit() - таблица не обновится.

2 комментария:

  1. "Один интересный момент, account, созданный в одном потоке и переданный в другой, изменить не получится.
    Если мы поменяем атрибуты account в новом потоке и выполним Session.commit() — таблица не обновится."

    Если это фигово - не пробовал чуть иначе подойти к этому? Ну, например, между потоками гонять не чистый account, а словарь с этим объектом?

    ОтветитьУдалить
  2. Да я просто новую сессию в потоке создавал. А словарь не прокатил бы, имхо.

    ОтветитьУдалить