Latest web development tutorials

파이썬 작업 MySQL 데이터베이스

파이썬 DB-API 파이썬 표준 데이터베이스 인터페이스, 파이썬 DB-API는 개발자에게 데이터베이스 애플리케이션 프로그래밍 인터페이스를 제공한다.

파이썬 데이터베이스 인터페이스를 사용하면 데이터베이스 프로젝트를 선택할 수 있습니다, 매우 큰 데이터베이스를 지원합니다 :

  • 등에
  • 은 mSQL
  • MySQL의
  • PostgreSQL의
  • 마이크로 소프트 SQL 서버 2000
  • 인포믹스
  • 인터베이스
  • 신탁
  • 사이베이스

당신은에 액세스 할 수 있습니다 파이썬 데이터베이스 인터페이스와 API가 지원되는 데이터베이스의 세부 목록을 참조하십시오.

예를 들어, 서로 다른 DB의 API 모듈을 다운로드해야합니다 다른 데이터베이스, 당신은 당신이 오라클과 MySQL의 데이터베이스 모듈을 다운로드해야 오라클 데이터베이스와 MySQL의 데이터에 액세스해야합니다.

DB-API들은 기본 데이터베이스 시스템의 다양한 데이터베이스 인터페이스 프로그램의 다양한 액세스하는 일관된 인터페이스를 제공하기 위해 물체와 모드에 액세스해야 데이터베이스의 세트를 정의하는 규격이다.

대부분의 데이터베이스 인터페이스를 구현 파이썬의 DB-API는,베이스를 연결 한 후 사용하면 동일하게하여 각 데이터베이스를 사용할 수있다.

프로세스를 이용하여 파이썬 DB-API :

  • API 모듈의 도입.
  • 데이터베이스에 연결하기.
  • SQL 문 및 저장 프로 시저를 실행합니다.
  • 데이터베이스 연결을 닫습니다.

MySQLdb는 무엇인가?

MySQLdb MySQL의 C의 API의 확립에 기초하여, 파이썬 데이터베이스 API 스펙 V2.0을 구현 파이썬 MySQL 데이터베이스 연결을위한 인터페이스이다.


어떻게 MySQLdb를 설치 하는가?

DB-API와 MySQL의 스크립트를 작성하려면, 당신은 당신이 MySQL이 설치되어 있는지 확인해야합니다. 다음 코드를 복사하고 실행 :

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

만약 MySQLdb 모듈이 설치되어 있지 않는 것을 의미 실행 후에 출력은 다음의 경우 :

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

, MySQLdb를 설치 방문 http://sourceforge.net/projects/mysql-python을 , (Linux 플랫폼에 액세스 할 수 있습니다 https://pypi.python.org/pypi/MySQL-python ) 여기에서 해당 플랫폼의 선택 설치 패키지는, 바이너리와 소스 코드를 패키지로 미리 컴파일.

이진 릴리스 버전을 선택하는 경우, 설치 과정은 기본 설치를 완료하라는 메시지를 표시합니다. 소스 코드에서 설치하는 경우, 당신은 MySQLdb 릴리스의 최상위 디렉토리로 전환하고 다음 명령을 입력해야합니다 :

$ gunzip MySQL-python-1.2.2.tar.gz
$ tar -xvf MySQL-python-1.2.2.tar
$ cd MySQL-python-1.2.2
$ python setup.py build
$ python setup.py install

참고 : 위에서 설명한 모듈을 설치하려면 루트 권한이 있는지 확인합니다.


데이터베이스 연결

데이터베이스에 연결하기 전에 다음 항목을 확인하십시오 :

  • 당신은 데이터베이스 TESTDB를 만들었습니다.
  • TESTDB 데이터베이스에서는 테이블 EMPLOYEE를 만들었습니다
  • EMPLOYEE 테이블 필드 FIRST_NAME, LAST_NAME, 연령, 성별 및 소득.
  • 사용자가 자신의 직접 또는 루트 사용자 이름과 암호를 설정할 수 있습니다 "test123"을 "testuser를"이라는 TESTDB, 암호를 사용하여 데이터베이스에 연결, MySQL의 데이터베이스 사용자 라이센스가 부여 명령을 사용하십시오.
  • 컴퓨터에 이미 파이썬 MySQLdb 모듈을 설치했습니다.
  • 당신은 SQL 문에 익숙하지 않은 경우, 당신은 우리의 방문 SQL 자습서의 기초를

예 :

TESTDB MySQL 데이터베이스 링크의 예는 다음과 같습니다

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

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

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

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

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

print "Database version : %s " % data

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

상기 스크립트의 실행은 다음과 같은 결과가 출력 :

Database version : 5.0.45

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

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

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

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

# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
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/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.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:
   # Rollback in case there is any error
   db.rollback()

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

다음과 같이 위의 예는도 쓸 수있다 :

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.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)
   # 提交到数据库执行
   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/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.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/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.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/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.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의의 서브 클래스 여야합니다.