> 백엔드 개발 > 파이썬 튜토리얼 > Python을 mysql 데이터베이스에 연결하는 올바른 방법

Python을 mysql 데이터베이스에 연결하는 올바른 방법

高洛峰
풀어 주다: 2017-01-10 13:43:00
원래의
1206명이 탐색했습니다.

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

GadFly

mSQL

MySQL

PostgreSQL

Microsoft SQL Server 2000

Informix

Interbase

Oracle

Sybase

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

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

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

Python DB-API 사용 프로세스:

API 모듈을 소개합니다.

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

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

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

1. MySQLdb란?

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

2. 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 배포의 최상위 디렉터리로 전환하고 다음 명령을 입력해야 합니다.

$ 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
로그인 후 복사

참고: 루트 권한이 있는지 확인하세요. 위 모듈을 설치하려면

3. 데이터베이스 연결

데이터베이스에 연결하기 전에 다음 사항을 확인하세요.

TESTDB 데이터베이스를 생성했습니다.

TESTDB 데이터베이스에서 you 테이블 EMPLOYEE

EMPLOYEE 테이블 필드는 FIRST_NAME, LAST_NAME, AGE, SEX 및 INCOME입니다.

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

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

예:

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import MySQLdb
 
# 打开数据库连接
db = MySQLdb.connect("localhost","codecloud","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
로그인 후 복사

4. 데이터베이스 테이블 생성

데이터베이스 연결이 존재하는 경우 다음과 같이 실행() 메서드를 사용하여 데이터베이스에 대한 테이블을 생성할 수 있습니다.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import MySQLdb
 
# 打开数据库连接
db = MySQLdb.connect("localhost","codecloud","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()
로그인 후 복사

5. 데이터베이스 삽입 작업

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import MySQLdb
 
# 打开数据库连接
db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )
 
# 使用cursor()方法获取操作游标
cursor = db.cursor()
 
# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
     LAST_NAME, AGE, SEX, INCOME)
     VALUES (&#39;Mac&#39;, &#39;Mohan&#39;, 20, &#39;M&#39;, 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","codecloud","test123","TESTDB" )
 
# 使用cursor()方法获取操作游标
cursor = db.cursor()
 
# SQL 插入语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
    LAST_NAME, AGE, SEX, INCOME) \
    VALUES (&#39;%s&#39;, &#39;%s&#39;, &#39;%d&#39;, &#39;%c&#39;, &#39;%d&#39; )" % \
    (&#39;Mac&#39;, &#39;Mohan&#39;, 20, &#39;M&#39;, 2000)
try:
  # 执行sql语句
  cursor.execute(sql)
  # 提交到数据库执行
  db.commit()
except:
  # 发生错误时回滚
  db.rollback()
 
# 关闭数据库连接
db.close()
로그인 후 복사

예 :

다음 코드는 변수를 사용하여 SQL 문에 매개 변수를 전달합니다.

..................................
user_id = "test123"
password = "password"
 
con.execute(&#39;insert into Login values("%s", "%s")&#39; % \
       (user_id, password))
..................................
로그인 후 복사

6. 데이터베이스 쿼리 작업

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

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

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

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

예:

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

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import MySQLdb
 
# 打开数据库连接
db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )
 
# 使用cursor()方法获取操作游标
cursor = db.cursor()
 
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
    WHERE INCOME > &#39;%d&#39;" % (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
로그인 후 복사

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

업데이트 작업은 다음 작업에 사용됩니다. 데이터 테이블 Data를 업데이트합니다. 다음 예에서는 TESTDB 테이블의 모든 SEX 필드를 'M'으로 수정하고 AGE 필드를 1씩 증가시킵니다.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import MySQLdb
 
# 打开数据库连接
db = MySQLdb.connect("localhost","codecloud","test123","TESTDB" )
 
# 使用cursor()方法获取操作游标
cursor = db.cursor()
 
# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
             WHERE SEX = &#39;%c&#39;" % (&#39;M&#39;)
try:
  # 执行SQL语句
  cursor.execute(sql)
  # 提交到数据库执行
  db.commit()
except:
  # 发生错误时回滚
  db.rollback()
 
# 关闭数据库连接
db.close()
로그인 후 복사

트랜잭션 실행

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

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

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

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

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

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

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

예:

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

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

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

오류 처리

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

Python을 mysql 데이터베이스에 연결하는 올바른 방법

위 내용은 전체입니다. 이 글의 내용이 모든 분들의 공부에 도움이 되기를 바랍니다.

Python을 mysql 데이터베이스에 연결하는 올바른 자세와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿