Latest web development tutorials

подключение к базе данных MySQL python3

В этой статье мы вводим python3 использование PyMySQL подключения к базе данных, и простой CRUD.

Что такое PyMySQL?

PyMySQL для подключения к базе данных версии сервера MySQL в Python3.x, python2 в использовании MySQLdb.

PyMySQL следуют Python API базы данных спецификации v2.0 и содержит чисто-Python клиентскую библиотеку MySQL.


установка PyMySQL

Перед использованием PyMySQL, нам необходимо обеспечить установленный PyMySQL.

PyMySQL Скачать: https: //github.com/PyMySQL/PyMySQL.

Если он еще не установлен, мы можем использовать следующую команду, чтобы установить последнюю версию PyMySQL:

$ pip install PyMySQL

Если ваша система не поддерживает пип команду, вы можете использовать установлены следующие компоненты:

1, с помощью команды Git, чтобы загрузить установочный пакет (вы также можете вручную скачать):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2, если вам нужно разработать номер версии, вы можете использовать завиток команду для установки:

$ # X.X 为 PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录

Примечание: Убедитесь , что у вас есть привилегии суперпользователя для установки модулей , описанных выше.

Процесс установки не может появиться "ImportError: Нет модуль с именем Setuptools" сообщение об ошибке, которое означает , что вы не должны установить Setuptools, вы можете получить доступ к https://pypi.python.org/pypi/setuptools найти способ установки каждой системы.

Установка Linux Пример:

$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

Связь с базами данных

Перед подключением к базе данных, убедитесь, что следующие элементы:

  • Вы создали TESTDB базы данных.
  • В базе данных TESTDB вы создали таблицу сотрудников
  • СОТРУДНИК поля таблицы FIRST_NAME, LAST_NAME, возраст, пол и ДОХОД.
  • Пользователи подключаются к базе данных с использованием TESTDB с именем "TestUser", пароль "test123", вы можете настроить свой собственный прямо или корневой имя пользователя и пароль, Mysql лицензия пользователя базы данных, пожалуйста, используйте команду Grant.
  • На вашей машине уже установлен модуль Python MySQLDb.
  • Если вы не знакомы с утверждением SQL, вы можете посетить наш SQL учебник основы

Пример:

Следующие примеры связи баз данных TESTDB Mysql:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute()  方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()

print ("Database version : %s " % data)

# 关闭数据库连接
db.close()

Реализация этого скрипта выводит результаты выглядят следующим образом:

Database version : 5.5.20-log

Создание таблицы базы данных

Если соединение с базой данных существует, мы можем использовать метод Execute () для создания таблиц для базы данных, создать таблицу сотрудников, показанную в следующем:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

вставка базы данных

В следующем примере используется выполнить SQL INSERT заявление, чтобы вставить запись в таблицу EMPLOYEE:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()

# 关闭数据库连接
db.close()

Приведенный выше пример можно записать следующим образом:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # 执行sql语句
   cursor.execute(sql)
   # 执行sql语句
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

Следующий код использует переменные для передачи параметров в SQL заявление:

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

запросы к базе данных

Python Mysql запрос с использованием метода fetchone () для получения однократной данных с использованием метода fetchall () для получения множества данных.

  • fetchone (): Этот метод получает следующий набор результатов запроса.Результат представляет собой набор объектов
  • fetchall (): возвращает результат , чтобы получить все строки.
  • ROWCOUNT: Это атрибут только для чтения, и возвращает выполнение выполнения () метод после числа затронутых строк.

Пример:

Discover СОТРУДНИК таблица заработной платы (оплаты труда) поле данных больше, чем все 1000:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 获取所有记录列表
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
       # 打印结果
      print ("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income ))
except:
   print ("Error: unable to fecth data")

# 关闭数据库连接
db.close()

Результаты выполнения скрипта выше следующим образом:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

обновление баз

Данные операции обновление для обновления таблицы данных, следующие примеры TESTDB поля таблицы Секс все изменения 'M', поле AGE увеличивается на 1:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

делеция

Удаление данных удаления данных для таблицы, следующий пример демонстрирует удаление данных в таблице EMPLOYEE возрастов больше, чем все данные 20:

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 提交修改
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭连接
db.close()

Исполнительные делам

Механизм транзакций для обеспечения целостности данных.

Услуги должны иметь четыре свойства: атомарность, согласованность, изоляция, долговечность. Эти четыре свойства часто называют свойствами ACID.

  • Atomic (атомарность). Сделка является неделимой единицей работы, такие операции включаются в транзакции либо делать или не делать.
  • Последовательность (концентрации). Услуги должны быть изменены, чтобы сделать базу данных из одного согласованного состояния в другое согласованное состояние. Последовательность и атомарность тесно связаны между собой.
  • Изоляция (изоляция). Выполнение транзакции не может быть другой транзакции помех. То есть внутренняя операция транзакций и использование других транзакций данных параллелизм изолируется и не могут мешать друг другу между отдельными сделками выполняться одновременно.
  • Стойкость (долговечность). Стойкие также называют постоянным (неизменность), это означает, что когда-то транзакция фиксируется, изменить свои данные в базе данных должны быть постоянными. Следующие другие операции или его отказ не должен иметь никакого влияния.

Python DB API 2.0 обеспечивает два способа фиксации транзакции или отката.

примеров

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

Для транзакционной базы данных, программирование баз данных в Python, когда установлен курсор, автоматически начинает транзакцию базы данных невидимой.

совершить () метод для всех метода обновления курсора, откат (), чтобы откатить все операции текущего курсора. Каждый метод начал новый бизнес.


Обработка ошибок

DB API определяет некоторые ошибки и отклонения от нормы функционирования базы данных В следующей таблице перечислены эти ошибки и исключения.:

ненормальный описание
предупреждение Когда есть серьезное предупреждение для запуска, например, вставка данных усекается, и так далее. Это должен быть подкласс StandardError.
ошибка Все остальные, кроме предупреждений классы ошибок. Это должен быть подкласс StandardError.
InterfaceError Срабатывает, когда модуль интерфейса базы данных имеет свою собственную ошибку (вместо базы данных ошибок) происходит. Оно должно быть подклассом Error.
DatabaseError Запуск и ошибки базы данных, связанных с. Оно должно быть подклассом Error.
DataError Когда есть произошла ошибка обработки данных при запуске, например: деление на ноль ошибок, данные вне диапазона, и так далее. Это должен быть подкласс DatabaseError.
OperationalError Это относится к не-контролируемых пользователем, но произошла ошибка при базе данных. Например: случайно отключен, имя базы данных не найден, то сделка не удается, ошибка распределения памяти произошла ошибка базы данных и т.п. операции. Это должен быть подкласс DatabaseError.
IntegrityError Целостность-ошибки, связанные, например, внешнего ключа проверки не удается, и тому подобное. Он должен быть DatabaseError подкласс.
InternalError Внутренняя ошибка базы данных, такие как курсор (курсор), выходит из строя, синхронизация транзакций сбой и так далее. Он должен быть DatabaseError подкласс.
ProgrammingError Процедурные ошибки, такие как таблицы данных (таблица) не найдена или уже существует, ошибка синтаксиса SQL заявление, номер ошибки параметров, и так далее. Это должен быть подкласс DatabaseError.
NotSupportedError Не поддерживается ошибка, относится к использованию функций, таких как API или база данных не поддерживает. Например, при использовании .rollback на функции объекта подключения (), но база данных не поддерживает транзакции или сделка была закрыта. Это должен быть подкласс DatabaseError.