>백엔드 개발 >파이썬 튜토리얼 >MySQL에서 Python의 데이터 작업 예에 대한 자세한 설명

MySQL에서 Python의 데이터 작업 예에 대한 자세한 설명

Y2J
Y2J원래의
2017-04-27 11:47:591417검색

이 기사에서는 Python3을 사용하여 PyMySQL을 사용하여 데이터베이스에 연결하고 간단한 추가, 삭제, 수정 및 쿼리를 구현하는 방법을 소개합니다. 매우 좋은 참조 값을 가지고 있습니다. 아래 에디터로 살펴보겠습니다

이 글에서는 Python3을 사용하여 PyMySQL을 사용하여 데이터베이스에 연결하고 간단한 추가, 삭제, 수정 및 쿼리를 구현하는 방법을 소개합니다.

PyMySQL이란 무엇인가요?

PyMySQL은 Python 3.x에서 MySQL 서버에 접속하기 위해 사용하는 라이브러리이고, Python 2.x에서는 mysqldb를 사용한다.

PyMySQL 설치

PyMySQL을 사용하기 전에 PyMySQL이 설치되어 있는지 확인해야 합니다.

PyMySQL 다운로드 주소: https://github.com/PyMySQL/PyMySQL.

아직 설치되지 않은 경우 다음 명령을 사용하여 최신 버전의 PyMySQL을 설치할 수 있습니다.

$ pip install PyMySQL

시스템이 pip를 지원하지 않는 경우 명령을 사용하려면 다음 설치 방법을 사용할 수 있습니다.

1. git 명령을 사용하여 설치 패키지를 다운로드하고 설치합니다(수동으로 다운로드할 수도 있음).

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL
$ python3 setup.py install

2. 버전 번호를 지정해야 하는 경우 컬 명령을 사용하여 설치할 수 있습니다.

$ # X.X 为PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install

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

데이터베이스 연결

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

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

  • TESTDB 데이터베이스에서 EMPLOYEE 테이블을 생성했습니다

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

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

  • PyMySQL 모듈이 컴퓨터에 설치되었습니다.

예:

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

#!/usr/bin/python3
__author__ = 'mayi'
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print ("Database version : %s " % data)

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

데이터베이스 테이블 생성

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

#!/usr/bin/python3
__author__ = 'mayi'
import pymysql

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

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
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/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.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:
 # 如果发生错误则回滚
 db.rollback()

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

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

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.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)
 # 执行sql语句
 db.commit()
except:
 # 发生错误时回滚
 db.rollback()

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

데이터베이스 쿼리 작업

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

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

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

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

예:

급여 필드가 있는 EMPLOYEE 테이블의 모든 데이터를 쿼리합니다. 1000보다 큼 :

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.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()

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

업데이트 작업은 데이터 테이블의 데이터를 업데이트하는 데 사용됩니다. 다음 예에서는 데이터베이스 업데이트 작업의 모든 SEX 필드를 변경합니다. TESTDB 테이블을 'M'으로, AGE 필드를 1씩 증가:

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.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 데이터에서 20보다 큰 모든 AGE 삭제:

#!/usr/bin/python3
__author__ = 'mayi'

import pymysql

# 打开数据库连接
db = pymysql.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()

트랜잭션 실행

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

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

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

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

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

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

Instance

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

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

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

오류 처리

异常 描述
Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是StandardError的子类。
Error 警告以外所有其他错误类。必须是StandardError的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。必须是Error的子类。
DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。必须是DatabaseError的子类。
OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。必须是DatabaseError的子类。
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternamError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。必须是DatabaseError子类。
ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上使用rollback()函数,然而数据库并不支持事务或者事务已关闭。必须是DatabaseError的子类。

위 내용은 MySQL에서 Python의 데이터 작업 예에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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