python
이전 페이지다음 페이지
데이터베이스 인터페이스에 대한 Python 표준은 Python DB-API입니다. 대부분의 Python 데이터베이스 인터페이스는 이 표준을 따릅니다.
애플리케이션에 적합한 데이터베이스를 선택할 수 있습니다. Python Database API는 다음과 같은 광범위한 데이터베이스 서버를 지원합니다.
사용 가능한 Python 데이터베이스 인터페이스 목록은 Python 데이터베이스 인터페이스 및 API입니다. 액세스해야 하는 각 데이터베이스에 대해 별도의 DB API 모듈을 다운로드해야 합니다. 예를 들어, Oracle 데이터베이스와 MySQL 데이터베이스에 액세스해야 하는 경우 Oracle 및 MySQL 데이터베이스 모듈을 모두 다운로드해야 합니다.
DB API는 가능한 한 Python 구조와 구문을 사용하여 데이터베이스 작업을 위한 최소한의 표준을 제공합니다. 이 API에는 다음이 포함됩니다. -
우리는 MySQL을 사용하여 모든 개념을 배울 것이므로 MySQLdb 모듈에 대해 이야기합시다.
MySQLdb는 Python에서 MySQL 데이터베이스 서버에 연결하기 위한 인터페이스입니다. Python Database API v2.0을 구현하고 MySQL C API를 기반으로 구축되었습니다.
계속하기 전에 시스템에 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 데이터베이스에 연결하기 전에 다음을 확인하십시오 -
데이터베이스 TESTDB를 만들었습니다.
TESTDB에 EMPLOYEE 테이블을 생성했습니다.
이 테이블에는 FIRST_NAME, LAST_NAME, AGE, SEX 및 INCOME 필드가 있습니다.
사용자 ID "testuser"와 비밀번호 "test123"은 TESTDB에 접근하도록 설정되어 있습니다.
Python 모듈 MySQLdb가 컴퓨터에 제대로 설치되었습니다.
MySQL 기본 사항을 이해하기 위해 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() 데이터베이스 테이블에서 여러 값을 가져오는 방법입니다.
페원() − 쿼리 결과 집합의 다음 행을 가져옵니다. 결과 집합은 커서 개체를 사용하여 테이블을 쿼리할 때 반환되는 개체입니다.
fetchall() − 결과 집합의 모든 행을 가져옵니다. 일부 행이 이미 결과 집합에서 추출된 경우 결과 집합에서 나머지 행을 검색합니다.
행 수 − 읽기 전용 속성이며 execute() 메서드의 영향을 받은 행 수를 반환합니다.
다음 절차는 급여가 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
urllib 란 무엇입니까? urllib는 URL을 여는 데 사용할 수 있는 Python 모듈입니다. URL 작업에 도움이 되는 함수와 클래스를 정의합니다. Python을 사용하면 XML, HTML, JSON 등과 같은 인터넷 데이터에 액세스하고 검색할 수도 있습니다. Python을 사용하여 이 데이터를 직접 사용할 수도 있습니다. 이 튜토리얼에서는 웹에서 데이터를 검색하는 방법을 볼 것입니다. 예를 들어 여기에서는 guru99 비디오 URL을 사용했으며 Python을 사용하여 이 비디오 URL에 액세스하고 이 URL의 HT
놓치신 경우:Python 2는 2020년 1월 1일부로 공식적으로 지원되지 않음 . 아직 Python 2.7을 사용 중이라면 지금 업그레이드하세요. . 실행 중인 버전이 확실하지 않은 경우 Python 버전을 확인하세요. 많은 패키지 유지 관리자가 Python 3으로 마이그레이션했습니다. 일부는 여전히 Python 2를 지원하고 다른 일부는 이미 Python 2 지원을 중단했습니다. Python 2 코드 기반에서 마이그레이션해야 하는 경우 Python 코드를 Python 3으로 마이그레이션하는 방법에 대한 가이드를 읽어보세요.