파 이 썬 모듈 정리(8):MySQLdb

본 논문 의 대부분 내용 을 전재 하 다.http://drizzlewalk.blog.51cto.com/2203401/448874
MySQLdb for Python 사용 안내서/python 데이터베이스 작업

  
  
  
  
  1. # -*- coding: utf-8 -*-      
  2. #mysqldb     
  3. import time, MySQLdb     
  4.     
  5. #      
  6. conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="test",charset="utf8")   
  7. cursor = conn.cursor()     
  8.     
  9. #      
  10. sql = "insert into user(name,created) values(%s,%s)"    
  11. param = ("aaa",int(time.time()))     
  12. n = cursor.execute(sql,param)     
  13. print n     
  14.     
  15. #      
  16. sql = "update user set name=%s where id=3"    
  17. param = ("bbb")     
  18. n = cursor.execute(sql,param)     
  19. print n     
  20.     
  21. #      
  22. n = cursor.execute("select * from user")     
  23. for row in cursor.fetchall():     
  24.     for r in row:     
  25.         print r     
  26.     
  27. #      
  28. sql = "delete from user where name=%s"    
  29. param =("aaa")     
  30. n = cursor.execute(sql,param)     
  31. print n     
  32. cursor.close()     
  33.     
  34. #      
  35. conn.close()    

구체 적 인 조작 을 소개 하기 전에 프로그램 이 데이터 베이스 와 어떻게 상호작용 을 하 는 지 시간 을 들 여 이야기 합 니 다.1.데이터 베이스 와 연결 2.sql 문 구 를 실행 합 니 다.수신 반환 값 3.데이터베이스 연결 을 닫 고 MySQLdb 를 사용 하 는 것 도 위의 몇 단 계 를 따라 야 합 니 다.한 걸음 한 걸음 진행 합 니 다.mysql 인증:grant all on python data.*to'pyuser'@'localhost'identified by'pypasswd'0.MySQLdb 라 이브 러 리 import MySQLdb 1 을 도입 하여 데이터베이스 와 연결 conn=MySQLdb.connect(host='localhost',user='root',passwd='sa'를 만 듭 니 다.db="my table")conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="my table",charset="utf 8")conn=MySQLdb.connect(host="localhost",user="pyuser",passwd="pypasswd",db="python data")가 제공 하 는 connect 방법 은 데이터베이스 와 연결 하고 여러 개의 인 자 를 수신 하 는 데 사 용 됩 니 다.연결 대상 을 되 돌려 줍 니 다.자주 사용 하 는 매개 변 수 는 host:데이터베이스 호스트 이름 을 포함 합 니 다.기본 값 은 로 컬 호스트 입 니 다.user:데이터베이스 로그 인 이름 입 니 다.기본 값 은 현재 사용자 입 니 다.passwd:데이터베이스 로그 인 비밀 입 니 다.기본 값 은 비어 있 습 니 다.db:사용 할 데이터베이스 이름 입 니 다.묵인 값 이 없습니다.port:MySQL 서비스 에서 사용 하 는 TCP 포트 입 니 다.기본 값 은 3306 입 니 다.charset:데이터베이스 인 코딩 이 더 많 습 니 다.매개 변수 에 대한 정 보 는 여 기 를 찾 을 수 있 습 니 다.http://mysql-python.sourceforge.net/MySQLdb.html 그 다음 에 이 연결 대상 도 트 랜 잭 션 작업 에 대한 지원 을 제공 합 니 다.표준 방법 commt()는 rollback()스크롤 백 2 를 제출 합 니 다.sql 문 구 를 실행 하고 반환 값 cursor=conn.cursor()n=cursor.execute(sql,param)를 받 습 니 다.우선 연결 대상 을 사용 하여 cursor 대상 을 얻 습 니 다.다음 에 저 희 는 cursor 가 제공 하 는 방법 으로 작업 을 진행 할 것 입 니 다.이 방법 들 은 두 가지 유형 을 포함 합 니 다.1.명령 을 실행 하고 2.반환 값 cursor 를 받 아 명령 을 수행 하 는 방법:callproc(self,procname,args):저장 과정 을 수행 하 는 데 사 용 됩 니 다.받 은 매개 변 수 는 저장 프로 세 스 이름과 매개 변수 목록 이 고 반환 값 은 영향 을 받 는 줄 수 execute(self,query,args)입 니 다.하나의 sql 문 구 를 실행 합 니 다.받 은 매개 변 수 는 sql 구문 자체 와 사용 하 는 매개 변수 목록 입 니 다.반환 값 은 영향 을 받 은 줄 수 executmany(self,query,args)입 니 다.하나의 sql 문 구 를 실행 하지만 매개 변수 목록 의 인 자 를 반복 합 니 다.반환 값 은 영향 을 받 은 줄 수 nextset(self):다음 결과 집합 cursor 로 이동 하여 반환 값 을 받 는 방법:fetchall(self):모든 반환 결과 줄 을 받 습 니 다.fetchmany(self,size=None):size 줄 을 받 아 결과 줄 을 되 돌려 줍 니 다.size 의 값 이 되 돌아 오 는 결과 줄 의 수량 보다 크 면,cursor.arraysize 항목 의 데 이 터 를 되 돌려 줍 니 다.fetchone(self):결과 줄 을 되 돌려 줍 니 다.scroll(self,value,mode=relative):바늘 을 한 줄 로 이동 합 니 다.mode='relative'라면 현재 줄 에서 value 줄 을 이동 하 는 것 을 의미 합 니 다.mode='absolute'라면 결과 집합 첫 줄 에서 value 줄 을 이동 합 니 다.아래 코드 는 완전한 예 입 니 다.\#sql 문 구 를 사용 합 니 다.여기 서 받 을 인 자 는%s 자리 표시 자 를 사용 합 니 다.삽입 할 데이터 가 어떤 형식 이 든 자리 표시 자 는%s sql="insert into cdinfo values(%s,%s,%s,%s,%s,%s)"\#param 은 tuple 또는 list param=(title,singer,imgurl,url,alpha)\#실행 되 어야 합 니 다.성공 하면 n 의 값 은 1 n=cursor.execute(sql,param)\#조 회 를 실행 하 는 동작 cursor.execute("select*from cdinfo")\#우 리 는 fetchall 이라는 방법 을 사 용 했 습 니 다.이렇게 하면 cds 에 저 장 된 것 은 조회 가 되 돌아 오 는 모든 결과 입 니 다.모든 결 과 는 하나의 tuple 형식의 데이터 입 니 다.이 tuple 들 은 하나의 tuple cds=cursor.fetchall()\#tuple 이기 때문에따라서 결과 집합 print cds[0][3]\#또는 직접 표시 하여 결과 집합 의 실제 모습 print cds\#데 이 터 를 대량으로 삽입 해 야 한다 면 sql="insert into cdinfo values(0,%s,%s,%s,%s,%s)"\#각 값 의 집합 은 하나의 tuple 이 고 전체 매개 변수 집합 은 하나의 tuple 또는 list param=(title,singer,imgurl,url,alpha),(title 2,singer 2,imgurl 2,url 2,alpha 2))\#execute many 방법 으로 데 이 터 를 대량으로 삽입 합 니 다.정말 멋 진 방법 입 니 다!n=cursor.executmany(sql,param)가 주의해 야 할 것 은(또는 내 가 이상 하 게 생각 하 는 것 은)삽입 또는 삭제 또는 수정 작업 을 수행 한 후에 conn.comit()방법 으로 제출 해 야 데이터 베 이 스 를 진정 으로 저장 할 수 있 습 니 다.제 my sql 설정 문제 인지 잘 모 르 겠 습 니 다.한 마디 로 오늘 제 가 처음에 사용 할 때 commt 를 사용 하지 않 으 면...그 데 이 터 는 데이터베이스 에 저장 되 지 않 습 니 다.그러나 데 이 터 는 데이터베이스 에 있 었 습 니 다.자동 번호 가 누적 되 었 고 영향 을 받 은 줄 수 는 0.3 이 아니 기 때 문 입 니 다.데이터베이스 연결 을 닫 으 려 면 각각 포인터 대상 과 연결 대상 을 닫 아야 합 니 다.이름 이 같은 방법 으로 cursor.close()conn.close()3 단계 가 완료 되 었 습 니 다.기본 데이터베이스 작업 은 이 렇 습 니 다.다음은 MySQLdb 사용자 매 뉴 얼 두 개 입 니 다.http://mysql-python.sourceforge.net/MySQLdb.html MySQLdb 문서:http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb-module.html 5.인 코딩(어 지 러 움 방지)에 주의해 야 할 점:    1 Python 파일 설정 인 코딩 utf-8(파일 앞 에\#encoding=utf-8 추가)    2 MySQL 데이터베이스 charset=utf-8    3 Python 연결 MySQL 은 인자 charset=utf 8 을 추가 합 니 다.    4 파 이 썬 의 기본 인 코딩 을 utf-8(sys.setdefaultencoding(utf-8)로 설정 합 니 다.    #encoding=utf-8      import sys      import MySQLdb            reload(sys)      sys.setdefaultencoding('utf-8')            db=MySQLdb.connect(user='root',charset='utf 8')주:MySQL 의 설정 파일 설정 도 utf 8 로 MySQL 의 my.cnf 파일 을 설정 해 야 합 니 다.[client]/[mysqld]부분 에 기본 문자 집합 을 설정 합 니 다(보통/etc/mysql/my.cnf):[client]default-character-set=utf 8[mysqld]default-character-set=utf 8

좋은 웹페이지 즐겨찾기