5.1. Введение
Первое, что Вы будете делать, редактирование скрипта setup.py.
Имеются некоторые переменные, которые сообщают где искать MySQL include-файлы
и библиотеки. Значения корректны для стандартной установки MySQL в Red Hat
Linux (6.2) RPM. Если Вы имеете другую платформу, Вы должны будете вычислить
нужные значения самостоятельно. Вам почти никогда не придется изменять это.
Если Вы имеете старую версию distutils (до 1.0.2), обновитесь или удалите
параметры, относительно которых система возражает.
Обратите внимание, что недавние двоичные дистрибутивы с www.mysql.com
включают два набора библиотек пользователей: mysqlclient и
mysqlclient_r. Последний хранит поточно-безопасные библиотеки, так что
используйте именно его, если потоки Вам нужны
Если Вы имеете динамические библиотеки пользователей (в Linux .so-файлы),
они будут использоваться по умолчанию. Если они не в Вашем стандартном пути
загрузчика, Вы должны будете установить или откорректировать системную
переменную LD_LIBRARY_PATH (в Linux) или ту, которую Ваша платформа
требует. Иначе Вы можете скорректировать setup.py, чтобы компоновать
со статической библиотекой. Если Вы используете стандартный пакет RPM, с этим
не должно быть особых проблем.
ПРЕДУПРЕЖДЕНИЕ: Если Вы используете двоичный пакет Zope, Вы
нуждаетесь в выполнении скрипта setup.py программой python из
Zope. Иначе Zope (ZMySQLDA) не может найти _mysql.
Если Вы предпочитаете RPM, Вы можете использовать команду bdist_rpm
с setup.py. Это только формирует RPM, но не устанавливает его.
Этот модуль должен быть совместим с более старым интерфейсом, написанным
Joe Skinner. Однако, старая версия:
- Не поточно-совместимая (операции базы данных могли бы блокировать
все другие потоки) - Написан для MySQL 3.21 (не компилируется для более новых
версий без заплаток) - Не очень активно поддерживается
MySQLdb полностью новый модуль, распространяемый бесплатно согласно GNU
Public License. Никакой код из той версии не используется в MySQLdb.
Основные методы в Python MySQL
Теперь , когда мы установили , давайте рассмотрим некоторые основные методы, которые мы собираемся использовать сегодня.
1. MySQL connect()
Метод устанавливает соединение с базой данных MySQL из Python и возвращает объект . Затем этот объект можно использовать для доступа ко всей базе данных и выполнения других операций. Он принимает такие параметры, как хост , пользователь , пароль и база данных в качестве спецификаций базы данных, которую вы хотите подключить.
- – Для локальных серверов пользователь должен быть указан как “root” , иначе вы можете создать пользователя, перейдя по этой ссылке ,
- – Это зависит от того, что вы использовали в качестве пароля при создании пользователя. База данных также может быть без пароля(для нашего примера),
- – Для локального сервера, использующего xampp , мы можем использовать для доступа к базе данных. Мы также можем использовать IP адрес сервера или имя для доступа к хосту,
- – Это имя базы данных, которое вы собираетесь использовать. Если вы уже создали базу данных, вы можете просто указать ее имя здесь.
2. Курсор MySQL()
Метод создает объект cursor , который в дальнейшем может использоваться для выполнения операций CRUD (Создание, извлечение, обновление и удаление) над базой данных.
4. Закрытие MySQL()
Метод , определенный как в курсоре, так и в классе MySqlConnection , используется для закрытия соответствующих объектов.
6. MySQL извлекает все()
Метод извлекает все строки результирующего набора запроса и возвращает список кортежей с использованием объекта курсора.
5.5.3.3 Я все еще хочу использовать _mysql
Хорошо, это может быть необходимо в каком-то случае. ZMySQLDA делает
это потому, что Zope-модуль ZRDB сам по себе API, а слишком много уровней API
имеют тенденцию к разброду и шатанию. С этим поделать что-либо трудно. Кроме
того, было фактически довольно просто сделать это именно таким способом, да и
эффективность малость повысилась.
- Читайте документацию на MySQL, особенно C API для краткого обзора.
- Читайте документацию на MySQLdb. Это показывает, как C API транслируется
в Python. К тому же, это неплохой пример реализации. - Читайте исходники для MySQLdb, особенно рекомендуется для изучения файл
MySQLdb/cursors.py. Этот файл содержит большинство деталей, особенно в
реализации методов _query.
Спонсоры:
Хостинг:
Maxim ChirkovДобавить, Поддержать, Вебмастеру
PyMySQL задействованные строки
Предназначенный только для чтения атрибут курсор показывает количество строк, которые были получены в результате последнего использования одного из операторов SELECT, UPDATE или INSERT.
Python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pymysql
con = pymysql.connect(‘localhost’, ‘user17’,
‘s$cret’, ‘mydb’)
with con:
cur = con.cursor()
cur.execute(«SELECT * FROM cities WHERE id IN (1, 2, 3)»)
# rows = cur.fetchall()
# for row in rows:
# print(«{0} {1} {2}».format(row, row, row))
print(«The query affected {} rows».format(cur.rowcount))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/usr/bin/python3 importpymysql con=pymysql.connect(‘localhost’,’user17′, ‘s$cret’,’mydb’) withcon cur=con.cursor() cur.execute(«SELECT * FROM cities WHERE id IN (1, 2, 3)») # rows = cur.fetchall() # for row in rows: # print(«{0} {1} {2}».format(row, row, row)) print(«The query affected {} rows».format(cur.rowcount)) |
В данном примере, показано, что используемый оператор выбирает три строки.
Python
print(«The query affected {} rows».format(cur.rowcount))
1 | print(«The query affected {} rows».format(cur.rowcount)) |
Таким образом, составляется сообщение, в котором показывается количество задействованных строк.
Shell
$ ./affected_rows.py
The query affected 3 rows
1 2 |
$.affected_rows.py The query affected3rows |
Это результат вывода.
В данной инструкции было показано, как использовать базу данных MySQL в Python при помощи модуля PyMySQL.
PyMySQL — узнаем версию MySQL
В следующем примере показано, как отобразить текущую версию MySQL.
Python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pymysql
con = pymysql.connect(‘localhost’, ‘user17’,
‘s$cret’, ‘mydb’)
with con:
cur = con.cursor()
cur.execute(«SELECT VERSION()»)
version = cur.fetchone()
print(«Database version: {}».format(version))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/usr/bin/python3 importpymysql con=pymysql.connect(‘localhost’,’user17′, ‘s$cret’,’mydb’) withcon cur=con.cursor() cur.execute(«SELECT VERSION()») version=cur.fetchone() print(«Database version: {}».format(version)) |
Для того чтобы узнать версию MySQL, можно использовать команду .
Python
import pymysql
1 | importpymysql |
Для этого потребуется импортировать модуль.
Python
con = pymysql.connect(‘localhost’, ‘user17’,
‘s$cret’, ‘mydb’)
1 2 |
con=pymysql.connect(‘localhost’,’user17′, ‘s$cret’,’mydb’) |
Затем производится подключение к базе данных при помощи . Здесь требуется указать четыре параметра:
- имя хоста;
- имя пользователя;
- пароль;
- название базы данных.
Python
with con:
1 | withcon |
При помощи интерпретатор Python автоматически открывает доступные ресурсы. Он также обрабатывает возможные ошибки.
Python
cur = con.cursor()
1 | cur=con.cursor() |
Из объекта подключения создается курсор. Курсор используется для перемещения записей из набора результатов.
Python
cur.execute(«SELECT VERSION()»)
1 | cur.execute(«SELECT VERSION()») |
Для использования команды SQL вызывается метод курсора .
Python
version = cur.fetchone()
1 | version=cur.fetchone() |
Метод позволяет вызвать следующую строку из набора результатов запроса, показывая только одну запись. В том случае, если доступных данных нет, выводится .
Python
print(«Database version: {}».format(version))
1 | print(«Database version: {}».format(version)) |
Таким образом, версия базы данных выводится на экран.
Shell
$ ./version.py
Database version: 5.7.23-0ubuntu0.16.04.1
1 2 |
$.version.py Database version5.7.23-0ubuntu0.16.04.1 |
Это результат вывода.
MySQLdb dictionary cursor
There are multiple cursor types in the module.
The default cursor returns the data in a tuple of tuples.
When we use a dictionary cursor, the data is sent in a form
of Python dictionaries. This way we can refer to the data
by their column names.
dictionary_cursor.py
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb con = mdb.connect('localhost', 'testuser', 'test623', 'testdb') with con: cur = con.cursor(mdb.cursors.DictCursor) cur.execute("SELECT * FROM Writers LIMIT 4") rows = cur.fetchall() for row in rows: print row, row
In this example, we get the first four rows of the
table using the dictionary cursor.
cur = con.cursor(mdb.cursors.DictCursor)
We use the dictionary cursor.
cur.execute("SELECT * FROM Writers LIMIT 4")
We fetch four rows from the table.
for row in rows: print row, row
We refer to the data by column names of the table.
$ ./dictcur.py 1 Jack London 2 Honore de Balzac 3 Lion Feuchtwanger 4 Emile Zola
Example output.
PyMySQL fetchAll
Метод позволяет извлечь все (оставшиеся) строки результата запроса, возвращая их в виде последовательности последовательностей.
Python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pymysql
con = pymysql.connect(‘localhost’, ‘user17’,
‘s$cret’, ‘testdb’)
with con:
cur = con.cursor()
cur.execute(«SELECT * FROM cities»)
rows = cur.fetchall()
for row in rows:
print(«{0} {1} {2}».format(row, row, row))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/usr/bin/python3 importpymysql con=pymysql.connect(‘localhost’,’user17′, ‘s$cret’,’testdb’) withcon cur=con.cursor() cur.execute(«SELECT * FROM cities») rows=cur.fetchall() forrow inrows print(«{0} {1} {2}».format(row,row1,row2)) |
В данном примере из таблицы базы данных выводятся все города (cities).
Python
cur.execute(«SELECT * FROM cities»)
1 | cur.execute(«SELECT * FROM cities») |
Python
rows = cur.fetchall()
1 | rows=cur.fetchall() |
Python
for row in rows:
print(«{0} {1} {2}».format(row, row, row))
1 2 |
forrow inrows print(«{0} {1} {2}».format(row,row1,row2)) |
Shell
$ ./retrieve_all.py
1 Bratislava 432000
2 Budapest 1759000
3 Prague 1280000
4 Warsaw 1748000
5 Los Angeles 3971000
6 New York 8550000
7 Edinburgh 464000
8 Berlin 3671000
1 2 3 4 5 6 7 8 9 |
$.retrieve_all.py 1Bratislava432000 2Budapest1759000 3Prague1280000 4Warsaw1748000 5Los Angeles3971000 6NewYork8550000 7Edinburgh464000 8Berlin3671000 |
MySQLdb._mysql¶
If you want to write applications which are portable across databases,
use , and avoid using this module directly.
provides an interface which mostly implements the MySQL C API. For
more information, see the MySQL documentation. The documentation
for this module is intentionally weak because you probably should use
the higher-level MySQLdb module. If you really need it, use the
standard MySQL docs and transliterate as necessary.
The MySQL C API has been wrapped in an object-oriented way. The only
MySQL data structures which are implemented are the
(database connection handle) and (result handle)
types. In general, any function which takes as an
argument is now a method of the connection object, and any function
which takes as an argument is a method of the
result object. Functions requiring none of the MySQL data structures
are implemented as functions in the module. Functions requiring one of
the other MySQL data structures are generally not implemented.
Deprecated functions are not implemented. In all cases, the
prefix is dropped from the name. Most of the methods listed
are also available as MySQLdb Connection object methods. Their use is
non-portable.
C API | |
---|---|
various options to | |
option to | |
Настройка сервера MySQL для нашего приложения
В этом разделе мы загрузим и установим ваш сервер MySQL
1. Установка XAMPP на ваш сервер
Как использовать MySQL, нам требуется программный инструмент для управления администрированием MySQL через Интернет.
В этом уроке мы будем работать с phpMyAdmin . Если вы знакомы с любым другим программным обеспечением, вы также можете использовать его.
Программное обеспечение Xampp предоставляет веб-интерфейс phpMyAdmin. Вы можете скачать XAMPP отсюда.
Или сразу перейдите в Google и найдите скачать Xampp. Первая ссылка сама сделает свою работу !!
Загрузите правильную версию для вашей операционной системы и архитектуры.
2. Запустите Apache и MySQL
После установки и загрузки XAMPP запустите следующие два процесса:
- Веб-сервер Apache – для обслуживания HTTP-запросов
- Сервер MySQL – для базы данных
Обратите внимание, что порт по умолчанию для MySQL – 3306. Теперь в браузере перейдите в https://localhost
Это веб-страница хоста для Xampp . Нажмите на phpMyAdmin в правом верхнем углу , чтобы перейти к веб-интерфейсу php.
Здесь,
- Создайте новую базу данных, нажав кнопку создать в левом столбце.
- Сохраните подходящее имя для БД. В моем случае это просто Колба
Продолжайте и создайте таблицу в БД. Введите имя таблицы в пространство, указанное на рисунке, и нажмите Go.
3. Установка библиотеки Flask – MySQL в нашей системе
Flask использует flask_mysqldb connector для использования MySQL. Для установки пакета выполните следующую команду:
pip install flask_mysqldb
Идеально !!
MySQLdb create and populate table
We create a table and populate it with some data.
create_table.py
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb con = mdb.connect('localhost', 'testuser', 'test623', 'testdb') with con: cur = con.cursor() cur.execute("DROP TABLE IF EXISTS Writers") cur.execute("CREATE TABLE Writers(Id INT PRIMARY KEY AUTO_INCREMENT, \ Name VARCHAR(25))") cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')") cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')") cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')") cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')") cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")
We create a table and add five authors to it.
with con:
With the with keyword, the Python interpreter automatically releases
the resources. It also provides error handling.
cur.execute("CREATE TABLE Writers(Id INT PRIMARY KEY AUTO_INCREMENT, \ Name VARCHAR(25))")
This SQL statement creates a new database table called .
It has two columns: and .
cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')") cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')") ...
We use the statement to insert authors to the table.
Here we add two rows.
mysql> SELECT * FROM Writers; +----+-------------------+ | Id | Name | +----+-------------------+ | 1 | Jack London | | 2 | Honore de Balzac | | 3 | Lion Feuchtwanger | | 4 | Emile Zola | | 5 | Truman Capote | +----+-------------------+ 5 rows in set (0.00 sec)
After executing the script, we use the client tool to
select all data from the Writers table.
MySQLdb fetchall
The method fetches all (or all remaining) rows
of a query result set and returns a list of tuples.
fetch_all.py
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb con = mdb.connect('localhost', 'testuser', 'test623', 'testdb') with con: cur = con.cursor() cur.execute("SELECT * FROM Writers") rows = cur.fetchall() for row in rows: print row
In this example, we retrieve all data from the table.
cur.execute("SELECT * FROM Writers")
This SQL statement selects all data from the table.
rows = cur.fetchall()
The method gets all records. It returns a result
set. Technically, it is a tuple of tuples. Each of the inner tuples represent
a row in the table.
for row in rows: print row
We print the data to the console, row by row.
$ ./fetch_all.py (1L, 'Jack London') (2L, 'Honore de Balzac') (3L, 'Lion Feuchtwanger') (4L, 'Emile Zola') (5L, 'Truman Capote')
This is the output of the example.
Returning all data at a time may not be feasible. We can fetch rows one
by one.
fetch_onebyone.py
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb con = mdb.connect('localhost', 'testuser', 'test623', 'testdb') with con: cur = con.cursor() cur.execute("SELECT * FROM Writers") for i in range(cur.rowcount): row = cur.fetchone() print row, row
We again print the data from the table to the
console. This time, we fetch the rows one by one.
for i in range(cur.rowcount): row = cur.fetchone() print row, row
We fetch the rows one by one using the
method. The rowcount property gives the number of rows returned by the
SQL statement.
$ ./fetch_onebyone.py 1 Jack London 2 Honore de Balzac 3 Lion Feuchtwanger 4 Emile Zola 5 Truman Capote
This is the output of the example.
5.1.3 MySQL
MySQL-3.22
Гарантируется работа версии 3.22.32 и выше. Некоторые старые версии могут
работать, если Вы имеете старшую версию, Вы должны серьезно подумать об
апгрейде в целях исправления ошибок и дыр в защите.
MySQL-3.22 имеет проблему при попытке вставить значения
с дробными секундами. Значения, подобные 12:56:13.00, возвращены как
344:13:00, очевидно интерпретируя первоначальный ввод как 12 дней, 56 часов,
13 минут и 0 секунд (12 дней и 56 часов=344 часа). Чтобы избежать этой
проблемы, используйте тип .
MySQL-3.23
MySQLdb поддерживает транзакции, если их поддерживает сервер. Но
не гарантирует, что транзакции будут работать. Для этого Вы должны
использовать транзакционно-безопасную таблицу (TST). Текущие TST: BDB и
InnoDB. Таблицы GEMINI намечены для MySQL-4.0
Обратите внимание, что MySQL
функционирует в режиме по умолчанию, и MySQLdb
считает, что включен. Чтобы изменить это, используйте
инструкции SQL
MySQLdb version example
In the first example, we will get the version of the MySQL database.
version.py
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb import sys try: con = mdb.connect('localhost', 'testuser', 'test623', 'testdb') cur = con.cursor() cur.execute("SELECT VERSION()") ver = cur.fetchone() print "Database version : %s " % ver except mdb.Error, e: print "Error %d: %s" % (e.args,e.args) sys.exit(1) finally: if con: con.close()
In this script, we connect to the testdb database and execute the
statement. This will return
the current version of the MySQL database. We print it to the console.
import MySQLdb as mdb
We import the module.
con = mdb.connect('localhost', 'testuser', 'test623', 'testdb');
We connect to the database using the method.
We pass four parameters: the hostname, the database user name, the password,
and the database name.
cur = con.cursor() cur.execute("SELECT VERSION()")
From the connection, we get the cursor object. The cursor is
used to traverse the records from the result set. We call
the method of the cursor and
execute the SQL statement.
ver = cur.fetchone()
We fetch the data. Since we retrieve only one record, we
call the method.
print "Database version : %s " % ver
We print the data that we have retrieved to the console.
except mdb.Error, e: print "Error %d: %s" % (e.args,e.args) sys.exit(1)
We check for errors.
finally: if con: con.close()
In the final step, we release the resources.
$ ./version.py Database version : 5.7.23-0ubuntu0.16.04.1
This is a sample output.
6 ответов
18
Лучший ответ
Нашел! Дело в том, что у mariadb есть совместимый пакет, если у вас есть настройка ppa, как в http://downloads.mariadb.org/. Просто
Благодаря http://data-matters.blogspot.com/2013/08/install-mysql-python-with-mariadb.html
После этого устанавливается правильно
09 апр. 2014, в 00:38
Поделиться
24
Для Centos 7.0 установите следующее:
Для Fedora 23 +:
21 авг. 2014, в 17:15
Поделиться
14
Там нет решения на Ubuntu 16.04
Doing:
Работал для меня.
10 май 2016, в 14:06
Поделиться
5
Установите следующую библиотеку:
И создайте символическую ссылку с именем :
13 окт. 2016, в 13:45
Поделиться
1
Для Debian Jessie:
23 нояб. 2016, в 06:44
Поделиться
В Ubuntu 17.04 для меня работало следующее
22 июнь 2017, в 18:55
Поделиться
Ещё вопросы
- 1Каков наилучший способ распространения программы на Python, дополненной пользовательскими модулями c?
- 2Странное поведение при использовании лямбда-выражения в событии нажатия кнопок WPF
- 1Хранение данных для приложения Android
- 2Ошибка импорта базы данных MDB в SQL Server
- 2Unity — GetComponentsInChildren <T> () порядок возврата
- Показать JQuery Modal поверх Magnific Popup
- 1Подключение интерфейса GUI с асинхронной (ыми) работой ftp
- Передача переменных из файла JavaScript на другую HTML-страницу
- 1Как расширить аннотации в Java?
- Не могу изменить свойства объекта окна, используя JavaScript
- 2Не удается получить значения из строк / ячеек в GridView
- 2 динамических выпадающих со ссылкой
- Вызывают ли объекты свой деструктор, когда они назначены новому?
- Как подвести итоги отпуска без выходных?
- 1Запустите ProcessBuilder под другим пользователем в Linux
- Текстовое поле не должно фокусироваться при нажатии на ярлык в начальной загрузке
- Использование положения: исправлено, навигация не работает должным образом
- 1Python-клиентasticsearch — работа со многими узлами — как работать со сниффером
- 2Собираю все пути DAG
- есть более короткий способ записи: * ((T *) (v.addr)) = значение;
- Как кодировать букву апостроф в HTML?
- Вектор как аргумент в функции
- 1O (1) удаление для очереди JavaScript
- Получить результат из двух таблиц
- Получение всех возможных значений, когда столбец является внешним ключом
- Привязать функцию в сервисе к $ scope (Ошибка: невозможно установить свойство ‘onChange’ из неопределенного)
- Изменение имени класса диаграммы таблицы визуализации Google
- Общее количество строк в WebGrid с использованием jQuery
- 2Добавление пользовательского сообщения об ошибке для свойства модели
- 1Почему не удерживается CTRL-C и вызывается signal_handler?
- Макет был сломан в codeigniter и некоторых функциях jquery при изменении http на https
- Visual Studio 2005 вылетает при изменении переменной
- 1Принудительное закрытие в фоновом режиме в приложении для Android
- 2Создать изображение Маска
- Ширина не изменяется для диалогового окна
- MySQL 8.0: CTE WITH не выполняет два подпункта
- 1Как JavaScript знает, как ждать результата внутреннего обещания?
- JQuery JSON DOM не загружает данные
- AliasMatch: совпадение для всех, кроме хэша
- 1компактная реализация java.util.Map
- Как ждать диалогового окна подтверждения внутри углового интерфейса
- 1Очистка запятой и пробелов после замены
- 1Скрипт работает в браузере, но не в NodeJS
- 1Как перебрать файл JSON с NodeJS
- установите / снимите все флажки с помощью jquery 1.10.2
- 1Как преобразовать LLVM IR br обратно в цикл while
- 1Панды — Как определить нанс внутри функции применения?
- Как переместить изображение в Kineticjs на mousedown?
- 1php как отправить эти данные кинул локон
- 2Как преобразовать фиксированный байт / символ в управляемый символ [] в C #?
Настройка подключения к базе данных MySQL Flask
Теперь мы подключимся и будем использовать MySQL для хранения данных в нашей базе данных. Если вы не знаете, как создать приложение для колбы, ознакомьтесь с руководством по введению в колбу .
1. Подключение приложения Flask к MySQL
Процедура, которой мы следуем для подключения Flask-MySQL, выглядит следующим образом:
from flask import Flask,render_template, request from flask_mysqldb import MySQL app = Flask(__name__) app.config = 'localhost' app.config = 'root' app.config = '' app.config = 'flask' mysql = MySQL(app)
2. Настройка курсора подключения MySQL
Просто с приведенной выше настройкой мы не можем взаимодействовать с таблицами БД. Для этого нам нужно что-то под названием курсор .
Таким образом, Курсор обеспечивает способ взаимодействия Flask с таблицами БД. Он может сканировать данные БД, выполнять различные SQL-запросы, а также удалять записи таблиц.
Курсор используется следующим образом:
mysql = MySQL(app) #Creating a connection cursor cursor = mysql.connection.cursor() #Executing SQL Statements cursor.execute(''' CREATE TABLE table_name(field1, field2...) ''') cursor.execute(''' INSERT INTO table_name VALUES(v1,v2...) ''') cursor.execute(''' DELETE FROM table_name WHERE condition ''') #Saving the Actions performed on the DB mysql.connection.commit() #Closing the cursor cursor.close()
Поскольку MySQL не является autocommit DB, нам нужно зафиксировать вручную, т. Е. Сохранить изменения/действия, выполняемые cursor execute в БД .
3. Кодирование приложения для колбы
Теперь мы создадим небольшое приложение Flask, которое будет хранить данные, представленные пользователем, в таблице базы данных MySQL. Рассмотрим следующий код приложения:
from flask import Flask,render_template, request from flask_mysqldb import MySQL app = Flask(__name__) app.config = 'localhost' app.config = 'root' app.config = '' app.config = 'flask' mysql = MySQL(app) @app.route('/form') def form(): return render_template('form.html') @app.route('/login', methods = ) def login(): if request.method == 'GET': return "Login via the login Form" if request.method == 'POST': name = request.form age = request.form cursor = mysql.connection.cursor() cursor.execute(''' INSERT INTO info_table VALUES(%s,%s)''',(name,age)) mysql.connection.commit() cursor.close() return f"Done!!" app.run(host='localhost', port=5000)
Когда пользователь отправляет данные, они добавляются в базу данных MySQL с помощью команды cursor.execute . Мое имя таблицы info_table .
В form.html будет:
4. Реализация Кода
Теперь запустите сервер и перейдите в ” /форма ” ( см. Формы колбы )
Введите данные и нажмите Отправить
Теперь давайте проверим это в веб-интерфейсе phpMyAdmin
Идеально!!
pymysql
Самый простой и быстрый способ исправить ошибку — установить библиотеку pymysql:
Что бы вы смогли использовать ее в Django, в файле settings.py вам нужно импортировать библиотеку и использовать метод для подключения к API MySQLdb:
Эти настройки может понадобится положить в другие файлы, такие как ‘__init__.py’ или ‘manage.py’. Это зависит от вашего проекта. Суть в том, что мы должны импортировать pymysql до того, как будет выполнен импорт MySQLdb. Обычно это происходит в ‘settings.py’ в DATABASES.
Ниже пример файла настроек, который использую я при локальной разработке:
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3;
Я эту ошибку не встречал, но исправить ее можно вручную заменив версию mysqlclient следующим образом:
Каких либо ошибок при работе с этой библиотекой я не замечал.
MySQL install
If you do not already have MySQL installed, we must install it.
$ sudo apt-get install mysql-server
This command installs the MySQL server and various other packages.
While installing the package, we are prompted to enter
a password for the MySQL root account.
Next, we are going to create a new database user and a new database.
We use the client.
$ mysql -u root -p Enter password: mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec)
We connect to the database using the root account. We show all available
databases with the statement.
mysql> CREATE DATABASE testdb; Query OK, 1 row affected (0.02 sec)
We create a new database. We will use this database
throughout the tutorial.
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623'; Query OK, 0 rows affected (0.00 sec) mysql> USE testdb; Database changed mysql> GRANT ALL ON testdb.* TO 'testuser'@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> quit; Bye
We create a new database user. We grant all privileges to this user
for all tables of the database.
5.3.4 Некоторые примеры использования
Метод работает почти также, как и с
:
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,))
В этом примере . Почему затем в строке
использована опция ? Потому, что MySQLdb преобразует это в
литеральное значение SQL, которое является строкой ‘5’. Когда это закончено,
запрос будет фактически таким: «…WHERE price < 5».
Так, а теперь результаты:
>>> c.fetchone() (3L, 2L, 0L)
Как упомянуто ранее, в то время как столбец MySQL INTEGER транслируется в
Python integer, UNSIGNED INTEGER может вызвать переполнение, так что эти
значения преобразованы в Python long integer. До Python 1.6 long integer
сохраняли L, когда были преобразованы в строки с помощью
. В 1.6 и позже не включает L. Конечно,
L всегда выводится при использовании .
Когда Вы закончили работу с транзакцией, Вы должны выполнить
или . Если сервер и
таблицы не поддерживает транзакции, будет работать, но
вызовет исключительную ситуацию
Обратите внимание,
что это методы connection, а не cursor, даже при том, что
транзакция запускается через
Если Вы хотели получить большее количество строк, Вы могли бы использовать
или . На
параметр факультативный и имеет
значение по умолчанию (обычно 100). Оба этих метода
возвращают последовательность строк, или пустую последовательность, если
строки уже кончились.
Обратите внимание, что в отличие от вышеупомянутого,
вернет , когда не имеется больше
строк для выборки. Единственный другой метод, который Вы, очень вероятно, используете,
это многострочная вставка:
Единственный другой метод, который Вы, очень вероятно, используете,
это многострочная вставка:
c.execute("""INSERT INTO breakfast (name, spam, eggs, sausage, price) VALUES (%s, %s, %s, %s, %s)""", )
Здесь мы вставляем три строки по пять значений в каждой
Обратите
внимание, что имеется смесь типов (строки, int, float), хотя все еще
используется только. А также обратите внимание, что включили
только строки формата для одной строки
MySQLdb выбирает и дублирует их
для каждой строки.
PyMySQL заголовки столбцов
Далее будет показано, как вывести названия столбцов с информацией из таблицы базы данных.
Python
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pymysql
con = pymysql.connect(‘localhost’, ‘user17’,
‘s$cret’, ‘testdb’)
with con:
cur = con.cursor()
cur.execute(«SELECT * FROM cities»)
rows = cur.fetchall()
desc = cur.description
print(«{0:>3} {1:>10}».format(desc, desc))
for row in rows:
print(«{0:3} {1:>10}».format(row, row))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#!/usr/bin/python3 importpymysql con=pymysql.connect(‘localhost’,’user17′, ‘s$cret’,’testdb’) withcon cur=con.cursor() cur.execute(«SELECT * FROM cities») rows=cur.fetchall() desc=cur.description print(«{0:>3} {1:>10}».format(desc,desc1)) forrow inrows print(«{0:3} {1:>10}».format(row,row2)) |
Названия столбцов представляют собой метаданные. Они извлекаются из объекта курсора.
Python
desc = cur.description
1 | desc=cur.description |
Атрибут курсора возвращает информацию о каждом результативном столбце запроса.
Python
print(«{0:>3} {1:>10}».format(desc, desc))
1 | print(«{0:>3} {1:>10}».format(desc,desc1)) |
Таким образом, выводятся и форматируются названия столбцов таблицы.
Python
for row in rows:
print(«{0:3} {1:>10}».format(row, row))
1 2 |
forrow inrows print(«{0:3} {1:>10}».format(row,row2)) |
Данные перебираются и выводятся на экран при помощи цикла for.
Shell
$ ./column_headers.py
id name
1 432000
2 1759000
3 1280000
4 1748000
5 3971000
6 8550000
7 464000
8 3671000
1 2 3 4 5 6 7 8 9 10 |
$.column_headers.py idname 1432000 21759000 31280000 41748000 53971000 68550000 7464000 83671000 |
Это результат вывода.
5.2.1 Трансляция MySQL C API
MySQL C API был обернут объектно-ориентированным способом. Единственные
MySQL структуры данных, которые выполнены в данном интерфейсе, это
(дескриптор подключения базы данных) и
(дескриптор результата). Вообще, любая функция,
которая берет как параметр , теперь представляет
собой метод объекта подключения, и любая функция, которая берет
, теперь метод объекта результата. Функции, не
требующие ни одной структуры MySQL, выполнены как функции в модуле. Функции,
требующие какую-то из других структур данных MySQL, вообще не выполнены. Во
всех случаях префикс удален из имени. Большинство
перечисленных методов также доступно как методы объекта
MySQLdb Connection. Их использование не переносимо между базами данных.
C API | |