산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

Python - MySQL 데이터베이스 액세스

이전 페이지다음 페이지

데이터베이스 인터페이스에 대한 Python 표준은 Python DB-API입니다. 대부분의 Python 데이터베이스 인터페이스는 이 표준을 따릅니다.

애플리케이션에 적합한 데이터베이스를 선택할 수 있습니다. Python Database API는 다음과 같은 광범위한 데이터베이스 서버를 지원합니다.

사용 가능한 Python 데이터베이스 인터페이스 목록은 Python 데이터베이스 인터페이스 및 API입니다. 액세스해야 하는 각 데이터베이스에 대해 별도의 DB API 모듈을 다운로드해야 합니다. 예를 들어, Oracle 데이터베이스와 MySQL 데이터베이스에 액세스해야 하는 경우 Oracle 및 MySQL 데이터베이스 모듈을 모두 다운로드해야 합니다.

DB API는 가능한 한 Python 구조와 구문을 사용하여 데이터베이스 작업을 위한 최소한의 표준을 제공합니다. 이 API에는 다음이 포함됩니다. -

우리는 MySQL을 사용하여 모든 개념을 배울 것이므로 MySQLdb 모듈에 대해 이야기합시다.

MySQLdb란 무엇입니까?

MySQLdb는 Python에서 MySQL 데이터베이스 서버에 연결하기 위한 인터페이스입니다. Python Database API v2.0을 구현하고 MySQL C API를 기반으로 구축되었습니다.

MySQLdb를 어떻게 설치합니까?

계속하기 전에 시스템에 MySQLdb가 설치되어 있는지 확인하십시오. Python 스크립트에 다음을 입력하고 실행하십시오 -

#!/usr/bin/python

import MySQLdb

다음과 같은 결과가 나오면 MySQLdb 모듈이 설치되지 않았음을 의미합니다 -

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

MySQLdb 모듈을 설치하려면 다음 명령을 사용하십시오 -

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
For Fedora, use the following command -
$ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

참고 − 위 모듈을 설치하려면 루트 권한이 있는지 확인하십시오.

데이터베이스 연결

MySQL 데이터베이스에 연결하기 전에 다음을 확인하십시오 -

예시

다음은 MySQL 데이터베이스 "TESTDB"와 연결하는 예입니다.

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

이 스크립트를 실행하는 동안 내 Linux 컴퓨터에서 다음과 같은 결과가 생성됩니다.

Database version : 5.0.45

데이터 소스와 연결이 설정되면 연결 개체가 반환되어 db에 저장됩니다. 추가 사용을 위해, 그렇지 않으면 db 없음으로 설정됩니다. 다음으로 db 개체는 커서를 만드는 데 사용됩니다. 개체는 차례로 SQL 쿼리를 실행하는 데 사용됩니다. 마지막으로, 나오기 전에 데이터베이스 연결이 닫히고 리소스가 해제되는지 확인합니다.

데이터베이스 테이블 생성

데이터베이스 연결이 설정되면 execute를 사용하여 데이터베이스 테이블에 테이블 또는 레코드를 생성할 준비가 됩니다. 생성된 커서의 메소드입니다.

예시

EMPLOYEE −

데이터베이스 테이블을 생성해 보겠습니다.
#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

삽입 작업

데이터베이스 테이블에 레코드를 생성하고자 할 때 필요합니다.

예시

다음 예는 SQL INSERT를 실행합니다. EMPLOYEE 테이블에 레코드를 생성하는 명령문 -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

위의 예는 SQL 쿼리를 동적으로 생성하기 위해 다음과 같이 작성할 수 있습니다. -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

예시

다음 코드 세그먼트는 매개변수를 직접 전달할 수 있는 또 다른 형태의 실행입니다. −

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

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

읽기 작업

모든 데이터베이스에 대한 읽기 작업은 데이터베이스에서 유용한 정보를 가져오는 것을 의미합니다.

데이터베이스 연결이 설정되면 이 데이터베이스에 쿼리할 준비가 됩니다. fetchone()을 사용할 수 있습니다. 단일 레코드를 가져오는 메소드 또는 fetchall() 데이터베이스 테이블에서 여러 값을 가져오는 방법입니다.

예시

다음 절차는 급여가 1000 이상인 EMPLOYEE 테이블의 모든 레코드를 쿼리합니다. -

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

이것은 다음과 같은 결과를 생성합니다 -

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

업데이트 작업

모든 데이터베이스에 대한 업데이트 작업은 데이터베이스에서 이미 사용 가능한 하나 이상의 레코드를 업데이트하는 것을 의미합니다.

다음 절차는 SEX가 'M'인 모든 레코드를 업데이트합니다. . 여기에서 모든 남성의 AGE를 1년 늘립니다.

예시

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

삭제 작업

데이터베이스에서 일부 레코드를 삭제하려면 DELETE 작업이 필요합니다. 다음은 AGE가 20 이상인 EMPLOYEE의 모든 레코드를 삭제하는 절차입니다 -

예시

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

거래 수행

트랜잭션은 데이터 일관성을 보장하는 메커니즘입니다. 트랜잭션에는 다음 네 가지 속성이 있습니다. -

Python DB API 2.0은 커밋 또는 롤백 거래.

예시

트랜잭션을 구현하는 방법을 이미 알고 있습니다. 여기에 다시 유사한 예가 있습니다 -

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

커밋 작업

커밋은 변경 사항을 완료하기 위해 데이터베이스에 녹색 신호를 보내는 작업이며 이 작업 후에는 변경 사항을 되돌릴 수 없습니다.

다음은 commit을 호출하는 간단한 예입니다. 방법.

db.commit()

롤백 작업

하나 이상의 변경 사항에 만족하지 않고 해당 변경 사항을 완전히 되돌리려면 rollback()을 사용하십시오. 방법.

다음은 rollback()을 호출하는 간단한 예입니다. 방법.

db.rollback()

데이터베이스 연결 해제

데이터베이스 연결을 끊으려면 close() 메서드를 사용하십시오.

db.close()

사용자가 close() 메서드를 사용하여 데이터베이스에 대한 연결을 닫으면 처리되지 않은 트랜잭션이 DB에 의해 롤백됩니다. 그러나 DB 하위 수준 구현 세부 정보에 의존하는 대신 애플리케이션에서 명시적으로 커밋 또는 롤백을 호출하는 것이 좋습니다.

오류 처리

많은 오류 소스가 있습니다. 몇 가지 예는 실행된 SQL 문의 구문 오류, 연결 실패 또는 이미 취소되거나 완료된 명령문 핸들에 대한 fetch 메소드 호출입니다.

DB API는 각 데이터베이스 모듈에 존재해야 하는 여러 오류를 정의합니다. 다음 표에는 이러한 예외가 나열되어 있습니다.

시니어 번호 예외 및 설명
1

경고

치명적이지 않은 문제에 사용됩니다. StandardError를 서브클래싱해야 합니다.

2

오류

오류에 대한 기본 클래스입니다. StandardError를 서브클래싱해야 합니다.

3

인터페이스 오류

데이터베이스 자체가 아니라 데이터베이스 모듈의 오류에 사용됩니다. 오류를 하위 분류해야 합니다.

4

데이터베이스 오류

데이터베이스의 오류에 사용됩니다. 오류를 하위 분류해야 합니다.

5

데이터 오류

데이터의 오류를 참조하는 DatabaseError의 하위 클래스입니다.

6

작업 오류

데이터베이스 연결 끊김과 같은 오류를 나타내는 DatabaseError의 하위 클래스입니다. 이러한 오류는 일반적으로 Python 스크립터의 제어 범위를 벗어납니다.

7

무결성 오류

고유성 제약 조건이나 외래 키와 같이 관계 무결성을 손상시키는 상황에 대한 DatabaseError의 하위 클래스입니다.

8

내부 오류

커서가 더 이상 활성화되지 않는 것과 같은 데이터베이스 모듈 내부 오류를 참조하는 DatabaseError의 하위 클래스입니다.

9

프로그래밍 오류

잘못된 테이블 이름과 같은 오류를 참조하는 DatabaseError의 하위 클래스 및 기타 안전하게 사용자를 비난할 수 있습니다.

10

지원되지 않는 오류

지원되지 않는 기능을 호출하려는 것을 나타내는 DatabaseError의 하위 클래스입니다.

Python 스크립트는 이러한 오류를 처리해야 하지만 위의 예외를 사용하기 전에 MySQLdb가 해당 예외를 지원하는지 확인하십시오. DB API 2.0 사양을 읽으면 더 많은 정보를 얻을 수 있습니다.


python

  1. 파이썬 데이터 유형
  2. 파이썬 연산자
  3. 파이썬 통과 문
  4. 파이썬 함수 인수
  5. 파이썬 사전
  6. 파이썬 반복자
  7. 파이썬 클로저
  8. 파이썬 날짜 시간
  9. 파이썬 수면()
  10. 파이썬 - 개요