Форум сайта python.su
Вот обнаружилась странная вещь - при работе через 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) один раз за время жизни программы. Вполне подходит переменная модуля. Тут же описываешь свои таблицы.
Потом отовсюду строишь запросы, используюя эту метадату. И все. Ничего лишнего не возникает.
Может, я неправ. Но у меня работает именно так.
Офлайн
Ну предположительно так
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 штук по умолчанию.
Это позволяет сэкономить на постоянных переподключениях.
Может быть, именно их ты видишь?
Офлайн
Да, вроде бы свежая - последний релиз, или стоит утянуть trunk ?
Офлайн
Не важно.
Я trunk использую - нет проблем.
Сейчас в trunk 4.0 лежит.
Но разницы особой нет (в смысле безбаговости).
Офлайн
Андрей Светлову меня похожая ситуация: постоянно открывается несколько соединений, потом старые закрываются, а новые создаются. и их не 5 а от 1 до 20
engine использует ConnectionPool. Т.е. создает несколько connections и использует их. 5 штук по умолчанию.
Офлайн
Можно унаследоваться от Pool и сделать свою реализацию - ровно на 10 connections
Офлайн
унаследоваться от 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()
Отредактировано (Сен. 9, 2008 16:56:25)
Офлайн