Проверяем наличие модуля на примере из 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