>  기사  >  php教程  >  Python은 mysql 데이터베이스를 운영합니다.

Python은 mysql 데이터베이스를 운영합니다.

高洛峰
高洛峰원래의
2016-11-23 11:31:131437검색

Python의 표준 데이터베이스 인터페이스는 개발자에게 데이터베이스 애플리케이션 프로그래밍 인터페이스를 제공하는 Python DB-API입니다.

Python 데이터베이스 인터페이스는 다양한 데이터베이스를 지원하므로 프로젝트에 적합한 데이터베이스를 선택할 수 있습니다.

GadFly

mSQL

MySQL

PostgreSQL

Microsoft SQL Server 2000

Informix

Interbase

Oracle

Sybase

액세스할 수 있습니다. Python 데이터베이스 인터페이스 및 API 지원되는 데이터베이스의 세부 목록을 확인하세요.

다른 데이터베이스에 대해 다른 DB API 모듈을 다운로드해야 합니다. 예를 들어 Oracle 데이터베이스와 Mysql 데이터에 액세스해야 하는 경우 Oracle 및 MySQL 데이터베이스 모듈을 다운로드해야 합니다.

DB-API는 다양한 기본 데이터베이스 시스템과 다양한 데이터베이스 인터페이스 프로그램에 일관된 액세스 인터페이스를 제공하기 위해 필요한 일련의 개체와 데이터베이스 액세스 방법을 정의합니다.

Python의 DB-API는 대부분의 데이터베이스에 대한 인터페이스를 구현합니다. 이를 사용하여 각 데이터베이스에 연결한 후 동일한 방식으로 각 데이터베이스를 작동할 수 있습니다.

Python DB-API 사용 프로세스:

API 모듈을 소개합니다.

데이터베이스에 연결합니다.

SQL 문과 저장 프로시저를 실행합니다.

데이터베이스 연결을 닫습니다.

MySQLdb란 무엇입니까?

MySQLdb는 Python 데이터베이스 API 사양 V2.0을 구현하고 MySQL C API를 기반으로 하는 Python용 인터페이스입니다.

MySQLdb를 어떻게 설치하나요?

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

#!/usr/bin/python

import MySQLdb

실행 후 출력이 다음과 같다면 MySQLdb 모듈을 설치하지 않은 것입니다.

추적(가장 최근 호출 마지막):

파일 "test.py", 3행,

import MySQLdb

ImportError: 이름이 지정된 모듈이 없습니다. MySQLdb

MySQLdb를 설치하려면 http://sourceforge.net/projects/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, AGE, SEX 및 INCOME입니다.

데이터베이스 TESTDB에 연결하는 데 사용되는 사용자 이름은 "testuser"이고 비밀번호는 "test123"입니다. 직접 설정하거나 루트 사용자 이름과 비밀번호를 직접 사용할 수 있습니다. 그랜트 명령.

Python MySQLdb 모듈이 이미 컴퓨터에 설치되어 있습니다.

SQL 문에 익숙하지 않은 경우 기본 SQL 자습서를 참조하세요.

예:

다음 예는 Mysql의 TESTDB 데이터베이스에 연결됩니다.

#!/usr/bin/python

MySQLdb 가져오기

# 데이터베이스 열기 연결

db = MySQLdb.connect("localhost","testuser","test123","TESTDB")

# 커서() 메서드를 사용하여 연결을 얻습니다. 작업 커서

cursor = db.cursor()

# 실행 메소드를 사용하여 SQL 문 실행

cursor.execute("SELECT VERSION ()")

# 데이터베이스를 얻으려면 fetchone() 메서드를 사용하세요.

data =cursor.fetchone()

print "데이터베이스 버전: %s " % data

# 닫기 데이터베이스 연결

db.close()

위 스크립트를 실행하면 출력 결과는 다음과 같습니다.

데이터베이스 버전: 5.0.45

데이터베이스 테이블 생성

데이터베이스 연결이 존재하는 경우 Execute() 메소드를 사용할 수 있습니다. 데이터베이스에 대한 테이블을 생성하고 다음과 같이 EMPLOYEE 테이블을 생성합니다:

#!/usr/bin/python

import MySQLdb

# 데이터베이스 연결 열기

db = MySQLdb.connect("localhost","testuser","test123", "TESTDB")

# 작업 커서를 얻으려면 커서() 메서드를 사용하세요.

cursor = db.cursor()

# 데이터 테이블이 이미 존재하는 경우 실행() 메소드를 사용하여 테이블을 삭제합니다.

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 ()

데이터베이스 삽입 작업

다음 예에서는 SQL INSERT 문을 사용하여 EMPLOYEE 테이블에 레코드를 삽입합니다.

#!/usr/bin/python

MySQLdb 가져오기

# 데이터베이스 열기 연결

db = MySQLdb.connect("localhost","testuser","test123","TESTDB")

# 커서() 메서드를 사용하여 연결을 얻습니다. 작업 커서

cursor = db.cursor()

# SQL 삽입 문

sql = """INSERT INTO EMPLOYEE(FIRST_NAME,

성, 나이, 성별, 소득)

VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""

시도:

# sql 문 실행

cursor.execute(sql)

# 실행을 위해 데이터베이스에 제출

db.commit()

제외 :

# 오류 발생 시 롤백

db.rollback()

# 데이터베이스 연결 종료

db .close()

위의 예는 다음 형식으로도 작성할 수 있습니다.

#!/usr/bin/python

import MySQLdb

# 데이터베이스 연결 열기

db = MySQLdb. connect("localhost","testuser","test123 ","TESTDB" )

# 작업 커서를 얻으려면 커서() 메서드를 사용하세요.

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()

제외:

# 오류 발생 시 롤백

db.rollback()

# 데이터베이스 연결을 닫습니다.

db.close()

예:

다음 코드는 SQL 문에 매개 변수를 전달하는 변수:

.......................... ......

user_id = "test123"

password = "password"

con.execute('로그인 값에 삽입( "%s", "%s")' %

(사용자 ID, 비밀번호))

.............. .........

데이터베이스 쿼리 연산

Python은 fetchone() 메서드를 사용하여 Mysql을 쿼리하여 단일 조각을 얻습니다. 여러 데이터 조각을 가져오는 fetchall() 메서드가 있습니다.

fetchone(): 이 메소드는 다음 쿼리 결과 세트를 가져옵니다. 결과 세트는 객체입니다.

fetchall(): 반환된 모든 결과 행을 수신합니다.

rowcount: 이는 읽기 전용 속성이며 실행( 실행 후 영향을 받은 행 수를 반환합니다. ) 방법.

예:

급여 필드가 1000보다 큰 EMPLOYEE 테이블의 모든 데이터 쿼리:

#!/ usr/bin/python

import MySQLdb

# 데이터베이스 연결 열기

db = MySQLdb.connect("localhost" ,"testuser","test123","TESTDB" )

# 작업 커서를 얻으려면 커서() 메서드를 사용하세요.

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]

소득 = row[4]

# 결과를 인쇄하세요

print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" %

(fname, lname, age, 성별, 소득 )

제외:

print "오류: 데이터를 가져올 수 없습니다."

# 데이터베이스 연결 닫기

db .close( )

위 스크립트의 실행 결과는 다음과 같습니다.

fname=Mac, lname=Mohan , age=20, sex=M, 수입=2000

데이터베이스 업데이트 작업

업데이트 작업 다음 예에서는 TESTDB 테이블의 모든 SEX 필드를 'M'으로 변경하고 AGE 필드를 1씩 증가시킵니다.

#!/usr/bin/python

import MySQLdb

# 데이터베이스 연결 열기

db = MySQLdb.connect("localhost","testuser","test123" ,"TESTDB" )

# 작업 커서를 얻으려면 커서() 메서드를 사용하세요

커서 = db.cursor()

#SQL 업데이트 문

SQL = "UPDATE EMPLOYEE SET AGE = Age+1

Where Sex = ' %C'"%('M')

시도:

# SQL 문 실행

cursor.execute(sql)

# 데이터베이스에 제출 실행

db.commit()

제외:

# 오류 발생 시 롤백

db.rollback()

# 데이터베이스 연결 닫기

db.close ()

트랜잭션 실행

트랜잭션 메커니즘은 데이터 일관성을 보장할 수 있습니다.

트랜잭션에는 원자성, 일관성, 격리성, 내구성이라는 4가지 속성이 있어야 합니다. 이러한 네 가지 속성을 흔히 ACID 속성이라고 합니다.

원자성. 트랜잭션은 분할할 수 없는 작업 단위입니다. 트랜잭션에 포함된 모든 작업은 완료되거나 수행되지 않습니다.

일관성. 트랜잭션은 데이터베이스를 하나의 일관성 상태에서 다른 일관성 상태로 변경해야 합니다. 일관성과 원자성은 밀접한 관련이 있습니다.

격리. 거래의 실행은 다른 거래에 의해 방해받을 수 없습니다. 즉, 트랜잭션 내에서 사용되는 작업과 데이터는 다른 동시 트랜잭션과 격리되며, 동시에 실행되는 트랜잭션은 서로 간섭할 수 없습니다.

내구성. 영속성이라고도 하는 연속성은 트랜잭션이 커밋되면 데이터베이스의 데이터 변경 사항이 영구적이어야 함을 의미합니다. 후속 작업이나 실패는 이에 영향을 미치지 않습니다.

Python DB API 2.0 트랜잭션은 커밋 또는 롤백 두 가지 방법을 제공합니다.

예:

# SQL 레코드 삭제 문

sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d '" % (20)

try:

#SQL 문 실행

cursor.execute(sql)

#데이터베이스에 제출

db.commit()

제외:

# 오류 발생 시 롤백

db.rollback()

트랜잭션을 지원하는 데이터베이스의 경우 Python 데이터베이스 프로그래밍에서는 커서가 생성되면 보이지 않는 데이터베이스 트랜잭션이 자동으로 시작됩니다.

commit() 메서드는 커서에 대한 모든 업데이트 작업을 수행하고, Rollback() 메서드는 현재 커서에 대한 모든 작업을 롤백합니다. 각 메소드는 새로운 트랜잭션을 시작합니다.

오류 처리

DB API는 데이터베이스 작업에 대한 일부 오류와 예외를 정의합니다. 다음 표에는 이러한 오류와 예외가 나열되어 있습니다.

예외

설명

삽입된 데이터가 잘리는 등 심각한 경고가 발생하는 경우 경고가 발생합니다. StandardError의 하위 클래스여야 합니다.

오류 경고를 제외한 기타 모든 오류 유형입니다. StandardError의 하위 클래스여야 합니다.

InterfaceError 데이터베이스 인터페이스 모듈 자체에 오류가 발생할 때 발생합니다(데이터베이스의 오류 아님). 오류의 하위 클래스여야 합니다.

DatabaseError 데이터베이스 관련 오류가 발생할 때 발생합니다. 오류의 하위 클래스여야 합니다.

DataError 0으로 나누기 오류, 데이터 범위 초과 등 데이터 처리 중에 오류가 발생할 때 트리거됩니다. DatabaseError의 하위 클래스여야 합니다.

OperationalError는 사용자가 제어할 수 없는 오류이지만, 데이터베이스를 운영할 때 발생하는 오류를 말합니다. 예를 들어, 연결이 예기치 않게 끊겼거나, 데이터베이스 이름을 찾을 수 없거나, 트랜잭션 처리 실패, 메모리 할당 오류 등은 데이터베이스를 운영할 때 발생하는 오류입니다. DatabaseError의 하위 클래스여야 합니다.

IntegrityError 외래키 검사 실패 등 무결성 관련 오류입니다. DatabaseError 하위 클래스여야 합니다.

InternalError 커서 오류, 트랜잭션 동기화 오류 등 데이터베이스 내부 오류입니다. DatabaseError 하위 클래스여야 합니다.

ProgrammingError 프로그래밍 오류(예: 데이터 테이블을 찾을 수 없거나 이미 존재함), SQL 문 구문 오류, 잘못된 매개변수 수 등 DatabaseError의 하위 클래스여야 합니다.

NotSupportedError 지원되지 않음 오류는 데이터베이스에서 지원하지 않는 함수 또는 API의 사용을 나타냅니다. 예를 들어, 연결 개체에 .rollback() 함수가 사용되었지만 데이터베이스가 트랜잭션을 지원하지 않거나 트랜잭션이 닫혔습니다. DatabaseError의 하위 클래스여야 합니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.