Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Базы данных > подготовленные выражения для MySQL |
Автор: dipsy 5.8.2008, 13:44 |
смотрю http://mail.python.org/pipermail/db-sig/2006-February/004616.html письму более 2-х лет. введено ли в питон создание подготовленных выражений, как стандартная функциональность? можно ли в python создавать подготовленные выражения для MySQL вообще? |
Автор: dvska 5.8.2008, 16:50 |
dipsy Стандарт см. http://www.python.org/dev/peps/pep-0249/ А реализован он в каждом драйвере по-разному. |
Автор: dipsy 6.8.2008, 09:44 | ||||||
americanets, имею в виду операторы mysql вида:
dvska, я смотрел документацию. пишут:
хотя они и говорят prepare, но реально в коде функции execute выражение не подготавливается, а просто подставляется значение параметров в запрос, после чего запрос выполняется:
|
Автор: americanets 6.8.2008, 11:02 |
dipsy, а как ты представляешь себе работу Prepare ? так и есть подставляет значения |
Автор: dipsy 6.8.2008, 13:13 |
americanets, в питоне просто подставляет значения. в java - создаёт подготовленное выражение в базе и уже к нему обращается. т.е. к созданному подготовленному выражению можно обратиться по собственному имени в коде java. после вызова sql запроса prepare, в БД сохраняется распарсенный запрос. соответственно, обрабатывается он быстрее, чем просто запросы. |
Автор: americanets 6.8.2008, 13:48 | ||
не путаешь с хранимыми процедурами ? |
Автор: dipsy 6.8.2008, 15:01 | ||
взято с http://www.javable.com/tutorials/tjt/jdbc/basics/prepared.html при помощи кэша google:
создаётся поготовленное выражение - суть PREPARE в SQL |
Автор: americanets 6.8.2008, 15:17 | ||
Добавлено через 24 секунды http://www.devshed.com/c/a/Python/MySQL-Connectivity-With-Python/5/ Добавлено через 7 минут и 21 секунду а вот тут лучше http://www.sqlalchemy.org |
Автор: dipsy 6.8.2008, 16:33 | ||||
americanets, фишка не в создании нескольких запросов, а в том, что в БД должен сохраняться распарсенный запрос. executemany и execute только выполняют запрос, но они его не подготавливают в смысле SQL prepare. более полно, кусок кода функции execute:
если бы выполнялась prepare, то query должен был бы модифицироваться. чтобы получалось выражения вида
в функции execute это не происходит. то же и в функции executemany. они не создают подготовленных выражений, они только выполняют запросы. в SQLAlchemy не нашёл способа создания preparedstatements |
Автор: americanets 6.8.2008, 16:41 | ||
http://www.zoonman.com/library/mysql_sr_and_t.htm это не от языка зависит, это хранимые процедуры
http://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html Добавлено через 21 секунду http://www.zoonman.com/library/mysql_sr_and_t.htm |
Автор: dipsy 6.8.2008, 17:11 |
americanets, от языка зависит. в java есть возможность работы с prepare, в python похоже, стандартных возможностей нет. возможно, что реализуется в ODBC, но мне надо использовать MySQLdb хранимые процедуры это не подготовленные выражения. процедуры хранятся в базе постоянно. подготовленные выражения хранятся, видимо, пока открыто соединение хранимая процедура может содержать логику, переменные, создавать временные таблицы и много ещё чего подготовленное выражение - для выполнения одного запрос к БД по аналогии, как реальная функция отличается от функции lambda |
Автор: americanets 6.8.2008, 17:20 | ||||||
тут у тебя нет никаких подготовленных запросов
у тебя шаблон запроса и массивы данных, они также поставляются только в цикле и получается обычный запрос
и т д 5 штук вот и все. это просто реализация которая возможна в любом языке Добавлено через 5 минут и 7 секунд
|
Автор: dipsy 6.8.2008, 17:50 |
да, в этом частном примере с java могу ошибаться. да, в любом языке может быть реализована работа с шаблонами. и в python она реализована как стандартная функциональность. но. есть такая конструкция в mysql, как подготовленные выражения уверен, что есть языки, которые умеют по-умолчанию работать с подготовленными выражениями, а не только с шаблонами. и мне надо выяснить возможность работы с подготовленными выражениями в python при использовании библиотеки MySQLdb. если в ближайшее время не найду готового решения, то мне придётся писать эту функциональность (для закрытого проекта) |
Автор: americanets 6.8.2008, 17:57 | ||
это язык SQl |
Автор: dipsy 7.8.2008, 11:07 |
как минимум PHP умеет делать prepare (см. mysqli). PHP обращается к соответствующей библиотеке C. работа в C происходит на достаточно низком уровне (ниже уровня SQL запросов) спорить на эту тему далее не буду. хотите убедиться - смотрите исходники Добавлено через 8 минут и 38 секунд в файле исходника mysqli_api.c ищите по mysqli_prepare |