Latest web development tutorials

Python3 MySQL 데이터베이스 연결

본 논문에서는 Python3 사용 소개 PyMySQL는 데이터베이스, 간단한 CRUD에 연결합니다.

PyMySQL은 무엇입니까?

사용 mysqldb에 Python3.x, Python2에서 데이터베이스 연결 MySQL 서버 버전에 대한 PyMySQL.

PyMySQL 파이썬 데이터베이스 API 2.0 규격을 따르고 순수 파이썬 MySQL 클라이언트 라이브러리가 포함되어 있습니다.


PyMySQL 설치

PyMySQL을 사용하기 전에, 우리는 PyMySQL 설치 확인해야합니다.

PyMySQL 다운로드 :은 https : //github.com/PyMySQL/PyMySQL.

아직 설치하지 않은 경우, 우리는 PyMySQL의 최신 버전을 설치하려면 다음 명령을 사용할 수 있습니다 :

$ pip install PyMySQL

시스템이 핍 명령을 지원하지 않는 경우 설치를 사용할 수 있습니다 :

(당신은 또한 수동으로 다운로드 할 수 있습니다) 설치 패키지를 다운로드 할 자식 명령을 사용하여 1 :

$ 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 데이터베이스에서는 테이블 EMPLOYEE를 만들었습니다
  • EMPLOYEE 테이블 필드 FIRST_NAME, LAST_NAME, 연령, 성별 및 소득.
  • 사용자가 자신의 직접 또는 루트 사용자 이름과 암호를 설정할 수 있습니다 "test123"을 "testuser를"이라는 TESTDB, 암호를 사용하여 데이터베이스에 연결, MySQL의 데이터베이스 사용자 라이센스가 부여 명령을 사용하십시오.
  • 컴퓨터에 이미 파이썬 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

데이터베이스 테이블 만들기

데이터베이스 연결이있는 경우, 우리는 데이터베이스 테이블을 만들려면 다음에 표시된 테이블 EMPLOYEE를 만들려면 실행 () 메서드를 사용할 수 있습니다 :

#!/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()

데이터베이스 삽입

다음 예는 EMPLOYEE 테이블에 레코드를 삽입하기 위해 SQL의 INSERT 문을 실행합니다 :

#!/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))
..................................

데이터베이스 쿼리

복수의 데이터를 얻는다 () 메소드를 사용하여 단일 fetchall 데이터를 획득 대하여 fetchone () 메소드를 사용 파이썬 MySQL의 쿼리.

  • 대하여 fetchone () :이 방법은 다음 쿼리 결과 세트를 가져옵니다.결과 집합 대상인
  • fetchall은 () : 모든 행을받을 수있는 결과를 반환합니다.
  • 행 개수 :이 읽기 전용 속성이며, 실행이 영향을받는 행의 수를 후 () 메소드를 실행 반환합니다.

예 :

저가 EMPLOYEE 테이블 급여 (임금) 데이터 필드 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

데이터베이스 업데이트

데이터 테이블을 갱신하기위한 동작을 갱신하는 데이터는 다음의 예를 표 성 필드를 AGE 필드가 1만큼 증가 'M', 모든 변경 TESTDB 것

#!/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의 AGE의 데이터보다 큰 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 특성이라고합니다.

  • 원자 (자성). 트랜잭션은 작업 단위는, 이러한 작업이 트랜잭션에 포함하거나 수행 또는 수행하지 않는됩니다이다.
  • 일관성 (일관성). 서비스는 다른 일관성있는 상태로 하나의 일관된 상태에서 데이터베이스를 만들기 위해 변경해야합니다. 일관성과 자성 밀접하게 관련되어있다.
  • 분리 (격리). 다른 트랜잭션에 간섭 할 수없는 트랜잭션을 실행합니다. 즉, 트랜잭션 내부 동작 및 기타 데이터 트랜잭션의 동시 사용은 분리되어 개별 트랜잭션이 동시에 실행 사이에 서로 간섭 할 수있다.
  • 지속성 (내구성). 영구는 영구 (영구)라고, 그것은 트랜잭션이 커밋되면, 영구적해야 데이터베이스에 데이터를 변경할 수 있음을 의미한다. 다음과 같은 다른 작업이나 실패는 영향을주지해야한다.

파이썬 DB의 API 2.0은 거래의 두 가지 방법이 커밋 또는 롤백 제공합니다.

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

커서가 설립 트랜잭션 데이터베이스, 파이썬에서 데이터베이스 프로그래밍의 경우, 자동으로 보이지 않는 데이터베이스 트랜잭션을 시작합니다.

현재 커서의 모든 작업을 롤백하는 모든 업데이트 커서, 롤백 () 메서드 () 메소드를 커밋합니다. 각 방법은 새로운 사업을 시작했다.


오류 처리

DB API는 약간의 오차가 데이터베이스의 이상 동작을 정의 다음 표는 오류 및 예외를 나열합니다 :

이상 기술
경고 데이터를 삽입하는 등 절단하고, 같은 트리거 중대한 경고가있는 경우. 그것은 StandardError의 서브 클래스 여야합니다.
오류 경고 이외의 다른 모든 오류 클래스. 그것은 StandardError의 서브 클래스 여야합니다.
InterfaceError 데이터베이스 인터페이스 모듈 자체 오류 (에러 대신 데이터베이스)를 갖는 경우 화재 발생한다. 이 오류의 서브 클래스 여야합니다.
DatabaseError의 트리거 및 데이터베이스 관련 오류. 이 오류의 서브 클래스 여야합니다.
DataError 이 경우, 예를 들면 트리거 될 때 데이터 처리 오류가 발생 분할 제로 에러가 상기 범위를 벗어난 데이터 등을. 그것은 DatabaseError의의 서브 클래스 여야합니다.
OperationalError 그것은 비 - 사용자 제어를 의미하지만, 에러는 데이터베이스 동안 일어났다. 예를 들어 실수 분리 데이터베이스 이름 등 작업 데이터베이스 오류가 발생한 메모리 할당 에러 트랜잭션 실패 발견되지 않는다. 그것은 DatabaseError의의 서브 클래스 여야합니다.
IntegrityError 이러한 외부 키 체크로 무결성 관련 오류가 실패 등을들 수있다. 그것은 DatabaseError의 서브 클래스 여야합니다.
않고 InternalError 이러한 커서 (커서) 내부 데이터베이스 오류는 오류 트랜잭션 동기화 등등 실패. 그것은 DatabaseError의 서브 클래스 여야합니다.
ProgrammingError 등등 데이터 테이블 (표)를 찾을 수 없거나 이미 존재하지 않는 SQL 문 구문 오류, 매개 변수의 오류 번호, 그리고 절차 적 오류. 그것은 DatabaseError의의 서브 클래스 여야합니다.
NotSupportedError 지원되지 않는 오류가 그러한 지원하지 않는 API 또는 데이터베이스와 같은 기능의 사용을 의미한다. 예를 들어, 상기 접속 대상물 () 함수에 .rollback 사용되지만 데이터베이스 트랜잭션을 지원하지 않거나 트랜잭션이 종료되었다. 그것은 DatabaseError의의 서브 클래스 여야합니다.