2014-11-03 1 views
3

В SQLAlchemy, я делаю соединение:как установить AutoCommit = 1 в sqlalchemy.engine.Connection

conn = engine.connect() 

Я нашел, что это будет установлено AutoCommit = 0 в моем журнале туздЫ. Теперь я хочу установить autocommit = 1, потому что я не хочу запрашивать транзакцию.

Есть ли способ сделать это?

ответ

2

От The SQLAlchemy documentation: Understanding autocommit

conn = engine.connect() 
conn.execute("INSERT INTO users VALUES (1, 'john')") # autocommits 

Функция «автокоммит» только в силу, когда нет Transaction не иначе был объявлен. Это означает, что функция обычно не используется с ORM, поскольку объект Session по умолчанию всегда поддерживает текущий Transaction.

Полный контроль за поведение «автоматической фиксации» доступен с помощью порождающей Connection.execution_options() метод, предусмотренных на Connection, Engine, Executable, с помощью «автоматической фиксации» флага, который будет включить или выключить AUTOCOMMIT для выбранной области. Например, text() конструкция, представляющая собой хранимую процедуру, обязывающее может использовать его таким образом, что ЗЕЬЕСТ будет выдавать COMMIT:

engine.execute(text("SELECT my_mutating_procedure()").execution_options(autocommit=True)) 
+0

Это делает работу, когда я хочу совершить сразу же после SQL statement.But это будет по-прежнему запрашивать мастер SQL-сервера, я хочу чтобы установить autocommit = 1 перед оператором sql.Because, если это так, этот sql будет запрашивать подчиненный mysql-server.So Как это сделать? Я прочитал ссылку, которую вы указали, но ответа пока нет. – izual

0

Это можно сделать с помощью опции autocommit в execution_option() метода:

engine.execute("UPDATE table SET field1 = 'test'").execution_options(autocommit=True)) 

Эта информация доступна в пределах documentation на Autocommit

+0

Это работает, когда я хочу зафиксировать сразу после инструкции sql. Но это все равно будет запрашивать основной SQL-сервер, я хочу установить autocommit = 1 перед оператором sql. Если это так, этот sql будет запрашивать slave mysql-server.So Как это сделать? Я прочитал ссылку, которую вы дали, но ответа нет – izual

2

Вы можете использовать это:

from sqlalchemy.sql import text 

engine = create_engine(host, user, password, dbname) 
engine.execute(text(sql).execution_options(autocommit=True) 
2

Ваше имя: dialect Сообщество:

Вы можете установить autocommit в True, чтобы решить эту проблему, как этот mysql+mysqldb://user:[email protected]:port/db?charset=foo&autocommit=true

Смежные вопросы