Найти - Пользователи
Полная версия: sqlalchemy close connection
Начало » Базы данных » sqlalchemy close connection
1
niro
Вот обнаружилась странная вещь - при работе через sqlalchemy появляются sleep-процессы в списке процессов mysql. Если работать через mysqldb их не возникает, даже если их не закрывать коннекты. Возможно я неправильно делаю соединяюсь через sqlalchemy. Обычно пишу так, вроде по туториалу:

db = create_engine('mysql://root@localhost/somebase').connect()
posts = Table('posts', db, autoload = True)
users = Table('users', db, autoload = True)
forum_sub = Table('forum_sub', db, autoload = True)
….
db.close()
Андрей Светлов
Как я понимаю, ты пытаешься пересоздавать схему постоянно.
Так в алхимии, вообще-то, не принято.
Создаешь metadata (он же db) один раз за время жизни программы. Вполне подходит переменная модуля. Тут же описываешь свои таблицы.
Потом отовсюду строишь запросы, используюя эту метадату. И все. Ничего лишнего не возникает.

Может, я неправ. Но у меня работает именно так.
niro
Ну предположительно так
engine = create_engine('sqlite://', **kwargs)
meta = MetaData()
meta.connect(engine)
posts = Table('posts', meta, autoload = True)
...
А закрывать коннект то как ?
Андрей Светлов

connection = engine.connect()
result = connection.execute(“select username from users”)
for row in result:
print “username:”, row
connection.close()


или

result = engine.execute(“select username from users”)
for row in result:
print “username:”, row
result.close()

connection - это еще не engine.
Кстати, у тебя свежая алхимия? В закрытых тикетах что-то такое проскальзывало.
Да, еще.
engine использует ConnectionPool. Т.е. создает несколько connections и использует их. 5 штук по умолчанию.
Это позволяет сэкономить на постоянных переподключениях.
Может быть, именно их ты видишь?
niro
Да, вроде бы свежая - последний релиз, или стоит утянуть trunk ?
Андрей Светлов
Не важно.
Я trunk использую - нет проблем.
Сейчас в trunk 4.0 лежит.
Но разницы особой нет (в смысле безбаговости).
axe
Андрей Светлов
engine использует ConnectionPool. Т.е. создает несколько connections и использует их. 5 штук по умолчанию.
у меня похожая ситуация: постоянно открывается несколько соединений, потом старые закрываются, а новые создаются. и их не 5 а от 1 до 20

когда соединения создаются как в этом примере: http://www.modpython.org/FAQ/faqw.py?req=show&file=faq03.003.htp
то там будет ровно 10 открытых (постоянных) соединений, новые создаваться не будут

т.е. постоянно будут использоваться только эти и ровно 10 соединений
хотелось бы, чтоб create_engine работал точно так же.
Андрей Светлов
Можно унаследоваться от Pool и сделать свою реализацию - ровно на 10 connections
axe
унаследоваться от Pool - это указать параметры pool или poolclass для create_engine?

запускал указанные примеры из-под mod_python:
result = engine.execute("select username from users")
for row in result:
print "username:", row['username']
result.close()
соединение остаётся маячить в базе

connection = engine.connect()
result = connection.execute("select username from users")
for row in result:
print "username:", row['username']
connection.close()
а в этом варианте получается два соединения с базой.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB