2008-11-14 2 views
23

나는 파이썬 스크립트를 실행하고 싶은 데이터베이스가있는 mssql 2005를 개인용 컴퓨터에서 실행 중이다. 나는 데이터에 대해 아주 간단한 접근을 할 수있는 방법을 찾고있다. 일부 select 문을 실행하고 데이터를 처리하고 파이썬이 결과와 함께 텍스트 파일을 저장하도록하고 싶습니다.파이썬이나 ironpython으로 mssql에 액세스하는 가장 간단한 방법은 무엇입니까?

불행히도, 파이썬에 대해 조금 알고 데이터베이스에 대해 조금 알고 있지만, 라이브러리가 내가 원하는 것을하지 않으면 읽는 것만으로는 알기가 매우 어렵습니다. 이상적으로, 나는 다른 버전의 mssql에서 작동하는 무언가를 무료로 사용할 수 있고 상업적 사용을 허가 받았으며, 사용하기 쉽고, 아마도 ironpython과 함께 작동 할 수 있기를 바란다.

답변

18

나는 cPython과 함께 SQL Alchemy을 사용합니다 (IronPython과 함께 작동하는지 모르겠습니다). Hibernate/nHibernate를 사용했다면 꽤 익숙 할 것입니다. 너무 길다면 Elixir을 사용할 수 있습니다. 이것은 SQL Alchemy 위에 얇은 레이어입니다. 이 중 하나를 사용하려면 pyodbc이 필요하지만 아주 간단합니다.

물론 SQL을 직접 작성하고 ORM을 사용하지 않으려면 pyodbc 만 있으면됩니다.

+1

Pyodb이 기록을 위해 대부분의 작업 –

4

또한 CPython과 함께 pymssql을 성공적으로 사용했습니다. (SQLAlchemy의 유무에 관계없이).

+1

작동, 나는 SQLAlchemy의에서 pymssql 지원되지 않습니다 믿습니다. 권장 드라이버는 pyodbc입니다 (pymssql이 독립형으로 작동하지 않는다고 말하는 것은 아닙니다). –

+0

아, 고마워. –

1

난 표준 파이썬과 pymssql을 사용하고 그것을 좋아했습니다. 아마도 이라면 언급 된 대안보다 더 간단 할 것입니다. 기본 데이터베이스 액세스를 찾고있는입니다.

샘플 code.

+0

샘플 코드 링크가 끊어졌습니다. 수정하거나 제거하십시오. – DavidJ

+0

완료! 링크가 업데이트되었습니다. –

12

pyodbc는 here에서 다운로드 할 수있는 Activestate Python과 함께 제공됩니다. 최소한의 ODBC를 스크립트는 2005 데이터베이스가이처럼 보이는 SQL 서버에 연결하려면 : 다른

import odbc 

CONNECTION_STRING=""" 
Driver={SQL Native Client}; 
Server=[Insert Server Name Here]; 
Database=[Insert DB Here]; 
Trusted_Connection=yes; 
""" 

db = odbc.odbc(CONNECTION_STRING) 
c = db.cursor() 
c.execute ('select foo from bar') 
rs = c.fetchall() 
for r in rs: 
    print r[0] 
+0

나는 Pyodbc의 주요 팬이다. 그것은 매우 간단하고 SQL 서버 및 기타 많은 데이터 소스와 함께 사용하기 쉽습니다. – TimothyAWiseman

25

모두가 CPython을 갖고있는 것 같아요 -> SQL 서버 측이 덮여. 당신은 IronPython을 사용하려면 데이터베이스에 얘기를 표준 ADO.NET API를 사용할 수 있습니다 : 이미 IronPython의를 가지고있는 경우에

import clr 
clr.AddReference('System.Data') 
from System.Data.SqlClient import SqlConnection, SqlParameter 

conn_string = 'data source=<machine>; initial catalog=<database>; trusted_connection=True' 
connection = SqlConnection(conn_string) 
connection.Open() 
command = connection.CreateCommand() 
command.CommandText = 'select id, name from people where group_id = @group_id' 
command.Parameters.Add(SqlParameter('group_id', 23)) 

reader = command.ExecuteReader() 
while reader.Read(): 
    print reader['id'], reader['name'] 

connection.Close() 

, 당신은 아무것도를 설치할 필요가 없습니다.

많은 문서를 이용할 수 있습니다. herehere.

+0

그 예는 조금 비대 해 보입니다. – graffic

+2

불행히도 ADO.NET은 해당 Python DBAPI 코드보다 약간 자세한 정보입니다 (일반적으로 .NET 클래스 라이브러리에 해당). 그러나 DBAPI 모듈로 감싸기에는 너무 나쁘지 않고 쉽습니다. 나는 SQLAlchemy를 사용하여이 작업을 수행했다. – babbageclunk

+0

아주 좋은 지적이지만 SMO가 또 다른 옵션이라는 것을 잊지 마십시오. – TimothyAWiseman

0

CPython으로 빠르고 더러운 방법을 원할 경우 (3.X 파이썬)를 설치 한 후

이 PYWIN32을 설치 파이썬 http://sourceforge.net/projects/pywin32/files/pywin32/

가져 오기 다음 라이브러리 : 수입 ODBC를

내가 만든 SQL 서버 ODBC 드라이버를 얻기 위해 다음 방법 (이 이름에서 약간 다릅니다 Windows 버전에 따라, 그래서 이것은)에 관계없이 얻을 것이다 :

def getSQLServerDriver(): 
    key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\ODBC\ODBCINST.INI") 
    sqlServerRegExp = re.compile('sql.*server', re.I | re.S) 

    try: 
     for i in range(0, 2048): 
      folder = winreg.EnumKey(key, i) 
      if sqlServerRegExp.match(folder): 
       return folder.strip() 
    except WindowsError: 
     pass 

참고 : 위의 기능을 사용하는 경우, 당신은 또한이 두 라이브러리를 가져올해야합니다 : WinRE를을 g 여기에 정의 된 다음

당신이 ODBC API (1) 정보를 사용하여 다시 : http://www.python.org/dev/peps/pep-0248/

의 모양은 귀하의 연결 인터페이스 문자열 (당신이 ODBC 드라이버 이름을 얻기를위한 나의 위의 방법을 사용하는 가정하고, 신뢰할 수있는 연결입니다.) :

dbString = "Driver={SQLDriver};Server=[SQL Server];Database=[Database Name];Trusted_Connection=yes;".replace('{SQLDriver}', '{' + getSQLServerDriver() + '}') 

이 방법은 여러 측면이 있습니다. 그것은 ODBC API 1만을 지원하기 때문에 어색하고 API 나 ODBC 드라이버에 몇 가지 사소한 버그가 있지만 Windows의 CPython의 모든 버전에서이 작업을 수행합니다.

2

PyPyODBC (http://code.google.com/p/pypyodbc)은 PyPy, Ironpython 및 CPython에서 작동합니다.

This article은 Python에서 mssql에 액세스하는 Hello World 샘플을 보여줍니다.

PyPyODBC는 pyodbc moudle의 재 구현으로 볼 수 있기 때문에 pyodbc와 거의 동일한 용도로 사용됩니다. 순수 Python으로 작성 되었기 때문에 IronPython 및 PyPy에서도 실행될 수 있습니다. 스위치가 기존 스크립트에 pypyodbc 때

는 사실, 당신은이 작업을 수행 할 수 있습니다

#import pyodbc    <-- Comment out the original pyodbc importing line 

import pypyodbc as pyodbc # Let pypyodbc "pretend" the pyodbc 

pyodbc.connect(...)   # pypyodbc has 99% same APIs as pyodbc 

... 
관련 문제