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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.