Python 이 Sql Server 2008 데이터 베 이 스 를 조작 하 는 방법 에 대한 상세 한 설명

이 글 은 Python 이 Sql Server 2008 데이터 베 이 스 를 조작 하 는 방법 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
최근 회사 의 한 프로젝트 수요 로 인해 Sql Server 2008 데이터 베 이 스 를 사용 하고 언어 를 개발 하여 Python 을 사용 하 며 windows 플랫폼 의 Wing IDE 4.0 을 기반 으로 진행 되 고 있 습 니 다.
이전에 Sql Server 데이터 베 이 스 를 사용 한 적 이 없 는데 이번에 도 조련 사로 삼 아 이번 데이터 베 이 스 를 초기 개발 하 는 과정 에서 발생 한 문제점 을 기록 했다.
1.pyodbc 라 이브 러 리 와 pymssql 라 이브 러 리 에 대한 선택
python 언어 를 사용 하여 개발 하기 전에 어떤 제3자 데이터 베 이 스 를 사용 하 는 지 확인 해 야 합 니 다.현재 Python 은 pymssql 과 pyodbc 같은 라 이브 러 리 를 제공 하고 있 습 니 다.현재 인터넷 자료 가 비교적 많은 것 도 이 두 개 입 니 다.처음에 저 는 pymssql 라 이브 러 리 를 설치 하고 사 용 했 지만 python 응용 프로그램 을 통 해 Sql Server 데이터 베 이 스 를 원 격 으로 방문 하여 연결 할 수 없 었 습 니 다.windows 플랫폼 에 대해 잘 모 르 기 때문에 인터넷 에서 자 료 를 찾 아 보 았 지만 결과 가 없 었 습 니 다.feeds 에 의존 해 야 하고 각종 변 화 량 을 설정 해 야 한다 고 말 했 습 니 다.결국 저 는 이 를 포기 하고 pyodbc 로 바 꾸 었 습 니 다.작은 문제 도 있 었 지만.하지만 전체적으로 순조롭다.
2.pyodbc 라 이브 러 리 에 대한 인터페이스 설명
제3자 python 라 이브 러 리 를 기반 으로 Sql 서버 데이터 베 이 스 를 방문 하 는 과정 은 매우 간단 하 다.
1 연결 데이터베이스 열기
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')
혹은:
cnxn = pyodbc.connect(DRIVER='{SQL Server}',SERVER='localhost',DATABASE='testdb',UID='me',PWD='pass')
여기 서 매개 변 수 를 간단하게 설명 합 니 다.DRIVER='{SQL Server}'이것 은 보통 Sql Server 에서 변경 되 지 않 는 한 고정 되 어 있 습 니 다.
SERVER:이 매개 변 수 는 데이터베이스 서버 이름 입 니 다."192.168.0.X"가 아 닙 니 다.보통 설치 할 때 이름 을 짓 습 니 다.제 것 은:ZHANGHUAMIN\MSSQLSERVER 입 니 다.ZHM
DATABASE:이 매개 변 수 는 Sql Server 의 구체 적 인 데이터 베 이 스 를 말 합 니 다.이 connect 인 터 페 이 스 를 사용 하기 전에 sqlserver 에서 먼저 만 들 고 존재 해 야 합 니 다.그렇지 않 으 면 연결 이 되 지 않 습 니 다.
UID:사용자 이름
PWD:비밀번호
실행 이 완료 되면 데이터베이스 연결 핸들 을 되 돌려 줍 니 다.
2 커서 포인터 가 져 오기

cursor = cnxn.cursor()

데이터베이스 에서 실 행 된 sql 문 구 는 커서 포인터 로 작 동 합 니 다.
3 데이터베이스 sql 작업 실행

cursor.execute("select user_id, user_name from users") #       execute    sql  
row = cursor.fetchone() #sql         ,            ,    cursor.fetchall()  
if row:
  print row

데이터베이스 에 sql 문 구 를 실행 한 후 이 사 무 를 제출 해 야 할 때 도 있 습 니 다.다음 인 터 페 이 스 를 사용 하 십시오.

cnxn.commit() 

특히 데이터베이스 나 데이터 시트 를 만 들 때 제출 하지 않 으 면 Sql Server 2008 터미널 에서 만 든 데이터베이스 와 데이터 시트 를 찾 을 수 없습니다.제출 하면 sql server 2008 에서 터미널 을 통 해 sql 문 구 를 조회 하면 즉시 찾 을 수 있 습 니 다.주:사 무 를 제출 하 는commit방법 은 데이터베이스 연결 핸들 대상 에 속 합 니 다.
4 데이터베이스 연결 닫 기

cnxn.close() 

파일 작업 과 유사 하여 더 이상 설명 하지 않 습 니 다.
3.python 으로 Sql Server 2008 데이터 베 이 스 를 조작 하 는 구체 적 인 절차

#!/usr/bin/python
#coding=utf-8
#-------------------------------------------------------------------------------
# Name: datamapper.py
# Purpose: using pyodbc library to operate database
#
# Author: huamin.zhang
#
# Created: 20/04/2013
#-------------------------------------------------------------------------------
import pyodbc
import time
class ODBC_MS:
  '''''  pyodbc          
  pyodbc      :http://code.google.com/p/pyodbc/downloads/list
       ,   Sql Server Configuration Manager   TCP/IP    
          DB   /  /    
           :
  cnxn = pyodbc.connect('DRIVER={SQL SERVER};SERVER=ZHANGHUAMIN\MSSQLSERVER_ZHM;DATABASE=AdventureWorks2008;UID=sa;PWD=wa1234')
  cnxn = pyodbc.connect(DRIVER='{SQL SERVER}',SERVER=r'ZHANGHUAMIN\MSSQLSERVER_ZHM',DATABASE='AdventureWorks2008',UID='sa',PWD='wa1234',charset="utf-8")
  '''
  def __init__(self, DRIVER,SERVER, DATABASE, UID, PWD):
    ''''' initialization '''
    self.DRIVER = DRIVER
    self.SERVER = SERVER
    self.DATABASE = DATABASE
    self.UID = UID
    self.PWD = PWD
  def __GetConnect(self):
    ''''' Connect to the DB '''
    if not self.DATABASE:
      raise(NameError,"no setting db info")
    self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD, charset="UTF-8")
    #self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD)
    cur = self.conn.cursor()
    if not cur:
      raise(NameError,"connected failed!")
    else:
      return cur
  def ExecQuery(self, sql):
    ''''' Perform one Sql statement '''
    cur = self.__GetConnect() #              
    cur.execute(sql)#       sql  
    ret = cur.fetchall()#       sql      
    cur.close()#      
    self.conn.close()#       
    return ret
  def ExecNoQuery(self,sql):
    ''''' Person one Sql statement like write data, or create table, database and so on'''
    cur = self.__GetConnect()
    cur.execute(sql)
    self.conn.commit()#       
    cur.close()
    self.conn.close()
def main():
  ms = ODBC_MS('{SQL SERVER}', r'ZHANGHUAMIN\MSSQLSERVER_ZHM', 'zhm_db', 'sa', 'wa1234')#zhm_db     sql server         
  #ms.ExecNoQuery("drop table Customers_test")
  sql = '''''CREATE TABLE Customers_test
  (
    CustomerNo   int       IDENTITY   NOT NULL,
    CustomerName  varchar(30)         NOT NULL,
    Address1    nvarchar(30)         NOT NULL ,
    Address2    nvarchar(30)         NOT NULL,
    City      nvarchar(20)         NOT NULL,
    State     nchar(20)          NOT NULL,
    Zip      varchar(10)         NOT NULL,
    Contact    varchar(25)         NOT NULL,
    Phone     char(15)           NOT NULL,
    FedIDNo    varchar(9)          NOT NULL,
    DateInSystem  smalldatetime        NOT NULL
  );'''
  ms.ExecNoQuery(sql)
  #  :        ,         
  sql = u'''''insert into Customers_test
  (
    CustomerName,
    Address1,
    Address2,
    City,
    State,
    Zip,
    Contact,
    Phone,
    FedIDNo,
    DateInSystem
  )
  VALUES
  (
    'zhm', '      ', '      ', '  ', '  ','3625514', '18001226509', '010-88765879', '21', '2012-09-09'
  );
  '''
  ms.ExecNoQuery(sql)
if __name__ == '__main__':
  main()

설명:저 는 이전에 Sql Server 가 자체 적 으로 가지 고 있 는 Adventure Works 2008 데이터베이스 루틴 을 연 결 했 고 그 중에서 상기 데이터 시트 Customers 를 만 들 었 습 니 다.test,그리고 위 와 같은 기록 을 삽입 합 니 다.결 과 는 Sql Server 2008 터미널 에서Select * FROM Customers_test로 조회 한 결과 중국어 정보 필드 를 포함 하 는 데 이 터 를'??????'로 바 꾸 었 습 니 다.오전 내 내 반복 되 었 습 니 다.유일 하 게 설명 할 수 있 는 이 유 는 Adventure Works 2008 데이터베이스 가 제 가 모 르 는 제약 을 했 기 때 문 입 니 다.중국어 에 대응 하 는 인 코딩 은 지원 되 지 않 습 니 다.위 와 같이 제 가 만 든 zhmdb 데이터 베 이 스 를 만 들 고 데이터 시트 를 만 든 다음 에 기록 을 삽입 합 니 다.마찬가지 로 Sql Server 단말기 에서 select 로 조회 하면 중국어 도 정상적으로 표시 할 수 있 습 니 다.
python 프로그램 에 추가 해 야 합 니 다:#coding = utf-8인 코딩 을 추가 하고 연결 connect 에 추가charset = "utf-8"문자 집합 을 utf-8 인 코딩 으로 표시 하면 됩 니 다.이렇게 하면 난 장 판 의 발생 을 방지 할 수 있다.
마지막 으로 Sql Server 2008 에서 터미널 사용SELECT * FROM Customers_test을 통 해 표 시 된 결 과 는 다음 과 같 습 니 다.

더 많은 파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기