Проверяем наличие модуля на примере из Python: ручная установка модулей на примере Psutil:
>>> imp.find_module("MySQLdb")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named MySQLdb
Если не найден — устанавливаем:
# pip install MySQL-python
В случае ошибки «InstallationError» — смотрим тут: CentOS: pip install MySQL-python — InstallationError.
Другой вариант — установить модуль вручную со страницы http://sourceforge.net/projects/mysql-python.
Создадим тестовую базу:
mysql> create database setevoy_test; Query OK, 1 row affected (0.01 sec)
mysql> grant all on setevoy_test.* to 'setevoy'@'%'; Query OK, 0 rows affected (0.05 sec)
Первый пример — выполнение простого запроса и получение версии MySQL:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
# создаём подключение с помощью метода Connect
db = MySQLdb.connect("localhost","setevoy","pass")
# создаём объект db с помощью метода cursor() модуля MySQLdb
cursor = db.cursor()
# выполняем SQL запрос с помощью метода execute()
cursor.execute("select version()")
# предыдущая строка возвращает объект класса Connection;
# выполним метод fetchone для получения одной строки
# или fetchall для получения всех
data = cursor.fetchone()
print "Версия MySQL : %s " % data
# и отключаемся от сервера
db.close()
Запускаем:
$ ./mysql.py Версия MySQL : 5.1.73
Получение подсказки по функциям, например с помощью pydoc:
$ pydoc MySQLdb ... PACKAGE CONTENTS connections constants (package) converters cursors release times ...
$ pydoc MySQLdb.connections
Или вызовом help(MySQLdb) в самом скрипте или из консоли интерпетатора:
>>> import MySQLdb >>> help(MySQLdb)
Усложним скрипт, и добавим в него создание базы и просмотр имеющихся таблиц:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
# есть упоминания о том, что некоторые версии MySQLdb
# после выполнения db.close не полностью "убирают мусор"
# добавим вызов garbage collector
import gc
# создаём подключение с помощью метода Connect
# тут с помощью init_command указываем первое действие, которое надо выполнить после подключения
# но для выбора базы - правильнее использовать db="databasename", init_command тут для примера
db = MySQLdb.connect(host="localhost", user="setevoy", passwd="pass", init_command="use setevoy_test")
# создаём объект db с помощью метода cursor() модуля MySQLdb
cursor = db.cursor()
# выполняем SQL запрос с помощью метода execute()
cursor.execute("select version()")
# предыдущая строка возвращает объект класса Connection;
# выполним метод fetchone для получения одной строки
data = cursor.fetchone()
print "Версия MySQL : %s " % data
# удалим таблицу, если уже есть
cursor.execute("drop table if exists testtable")
# для коротких запросов из можно можно записать в аргументы к execute
# длинный запрос - удобнее поместить в переменную
# создаём переменную с запросом
sql = """create table testtable(firstcol char(20) not null, secondcol char(20), intcol int)"""
# выполняем запрос
cursor.execute(sql)
# проверим таблицы
cursor.execute("show tables")
print "Так:"
for data in cursor:
print data[0]
print "Или так:"
tables = cursor.fetchall()
print tables
# и отключаемся от сервера
db.close()
# вызываем garbage collector
gc.collect()
Пример выполнения INSERT:
Посмотрим базу сейчас:
mysql> use setevoy_test; Database changed mysql> show tables; +------------------------+ | Tables_in_setevoy_test | +------------------------+ | testtable | +------------------------+ 1 row in set (0.06 sec) mysql> desc testtable; +-----------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+----------+------+-----+---------+-------+ | firstcol | char(20) | NO | | NULL | | | secondcol | char(20) | YES | | NULL | | | intcol | int(11) | YES | | NULL | | +-----------+----------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
Обычный запрос будет вылядеть так:
mysql> insert into testtable(firstcol, secondcol, intcol) values ('firstline', 'secondline', '100');
Query OK, 1 row affected (0.00 sec)
mysql> select * from testtable;
+-----------+------------+--------+
| firstcol | secondcol | intcol |
+-----------+------------+--------+
| firstline | secondline | 100 |
+-----------+------------+--------+
1 row in set (0.00 sec)
Добавим этот запрос в скрипт:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import gc
# создаём подключение с помощью метода Connect
# передаём имя базы через db="" вместо init_command=
db = MySQLdb.connect(host="localhost", user="setevoy", passwd="pass", db="setevoy_test")
# создаём объект db с помощью метода cursor() модуля MySQLdb
cursor = db.cursor()
# добавим обработку ошибок
try:
# создаём переменную с запросом
insert = """insert into testtable(firstcol, secondcol, intcol) values ('newline', 'newline', '100')"""
# выполняем запрос
cursor.execute(insert)
cursor.execute("select * from testtable")
# используем fetchall() вместо fetchone()
# что бы получить все данные
# а не только последнюю строку
data = cursor.fetchall()
print data
# добавим обработку ошибок
except MySQLdb.Error as e:
print "MySQL Error [%d]: %s" % (e.args[0], e.args[1])
else:
# и отключаемся от сервера
db.close()
gc.collect()
Запускаем:
$ ./mysql.py
(('newline', 'newline', 100L),)
И что бы посмотреть результат работы fetchall() — запустим ещё раз:
$ ./mysql.py
(('newline', 'newline', 100L), ('newline', 'newline', 100L))
Для множественного добавления данных — используем executemany().
Создадим список, в котором будет четыре кортежа:
>>> putit = [('line1', 'line2', 1), ('line3', 'line4', 2), ('line5', 'line6', 3), ('line7', 'line8', 4)]
>>> putit = [
... ('line1', 'line2', '1'),
... ('line3', 'line4', '2'),
... ('line5', 'line6', '3'),
... ('line7', 'line8', '4')
... ]
>>> type(putit)
<type 'list'>
>>> type(putit[1])
<type 'tuple'>
Редактируем скрипт:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import gc
# создаём подключение с помощью метода Connect
db = MySQLdb.connect(host="localhost", user="setevoy", passwd="liBerty911", db="setevoy_test")
# создаём объект db с помощью метода cursor() модуля MySQLdb
cursor = db.cursor()
try:
# создаём список, котрый содержит кортежи
putit = [
('line1', 'line2', '1'),
('line3', 'line4', '2'),
('line5', 'line6', '3'),
('line7', 'line8', '4')
]
# создаём переменную с запросом, где в VALUES передаём форматирование строки %s
insert = """insert into testtable(firstcol, secondcol, intcol) values (%s, %s, %s)"""
# выполняем запрос, вторым аргументом к executemany передаём наш словарь
print "Выполянем запрос INSERT..."
cursor.executemany(insert, putit)
print "Выполняем SELECT, что бы посмотреть результат: "
cursor.execute("select * from testtable")
data = cursor.fetchall()
print data
except MySQLdb.Error as e:
print "MySQL Error [%d]: %s" % (e.args[0], e.args[1])
else:
# и отключаемся от сервера
db.close()
gc.collect()
Запускаем:
$ ./mysql.py
Выполянем запрос INSERT...
Выполняем SELECT, что бы поcмотреть результат:
(('line1', 'line2', 1L), ('line3', 'line4', 2L), ('line5', 'line6', 3L), ('line7', 'line8', 4L))
Ссылки по теме
http://zetcode.com
http://ianhowson.com
http://webonrails.ru
http://www.tutorialspoint.com