MySQL- Руководство разработчика

Некоторые примеры использования


Метод connect() работает почти также, как и с _mysql: import MySQLdb db=MySQLdb.connect(passwd="moonpie",db="thangs") Чтобы выполнить запрос, Вы сначала нуждаетесь в курсоре, а затем Вы можете выполнять запросы на нем. c=db.cursor() max_price=5 c.execute("""SELECT spam, eggs, sausage FROM breakfast WHERE price < %s""", (max_price,))

В этом примере max_price=5. Почему затем в строке использована опция %s? Потому, что MySQLdb преобразует это в литеральное значение SQL, которое является строкой '5'. Когда это закончено, запрос будет фактически таким: "...WHERE price < 5".

Так, а теперь результаты: >>> c.fetchone() (3L, 2L, 0L) В отличие от примера с _mysql, это возвращает одиночный блок результатов, который является строкой, и значения правильно преобразованы.

Как упомянуто ранее, в то время как столбец MySQL INTEGER транслируется в Python integer, UNSIGNED INTEGER может вызвать переполнение, так что эти значения преобразованы в Python long integer. До Python 1.6 long integer сохраняли L, когда были преобразованы в строки с помощью str(). В 1.6 и позже str() не включает L. Конечно, L всегда выводится при использовании repr().

Когда Вы закончили работу с транзакцией, Вы должны выполнить db.commit() или db.rollback(). Если сервер и таблицы не поддерживает транзакции, commit() будет работать, но rollback() вызовет исключительную ситуацию. Обратите внимание, что это методы connection, а не cursor, даже при том, что транзакция запускается через c.execute(...).

Если Вы хотели получить большее количество строк, Вы могли бы использовать c.fetchmany(n) или c.fetchall(). На c.fetchmany(n) параметр n факультативный и имеет значение по умолчанию c.arraysize (обычно 100). Оба этих метода возвращают последовательность строк, или пустую последовательность, если строки уже кончились.

Обратите внимание, что в отличие от вышеупомянутого, c.fetchone() вернет None, когда не имеется больше строк для выборки.

Единственный другой метод, который Вы, очень вероятно, используете, это многострочная вставка: c.execute("""INSERT INTO breakfast (name, spam, eggs, sausage, price) VALUES (%s, %s, %s, %s, %s)""", [ ("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95 ), ("Not So Much Spam Plate", 3, 2, 0, 3.95 ), ("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95 )])

Здесь мы вставляем три строки по пять значений в каждой. Обратите внимание, что имеется смесь типов (строки, int, float), хотя все еще используется только %s. А также обратите внимание, что включили только строки формата для одной строки. MySQLdb выбирает и дублирует их для каждой строки.



Содержание раздела