2008-11-14 69 views
23

我有我的個人電腦上運行的數據庫我想運行一些python腳本的mssql 2005。我正在尋找一種方法來對數據進行一些非常簡單的訪問。我想運行一些選擇語句,處理數據,也許有python保存一個文本文件的結果。使用python或ironpython訪問mssql最簡單的方法是什麼?

不幸的是,儘管我對python和數據庫有一些瞭解,但是從閱讀的角度來看,我很難說出一個庫是否能做到我想要的。理想情況下,我想要一些適用於其他版本的mssql的工具,免費並且許可允許商業用途,使用簡單,並且可能適用於ironpython。

回答

18

我用SQL Alchemy與cPython(我不知道它是否會與IronPython一起工作)。如果你使用過Hibernate/nHibernate,那麼你會很熟悉。如果這對你來說太冗長了,你可以使用Elixir,這是SQL Alchemy之上的一個薄層。要使用其中之一,您需要pyodbc,但這是一個非常簡單的安裝。

當然,如果你想寫直SQL並且不使用ORM,你只需要pyodbc。

+1

Pyodb適用於大多數任務 – 2008-11-14 13:40:47

4

我也成功使用了CPython的pymssql。 (有和沒有SQLAlchemy)。

+1

爲了記錄在案,我相信,在SQLAlchemy的pymssql支持已被棄用。推薦的驅動程序是pyodbc(這並不是說pymssql不會獨立工作)。 – 2008-11-14 15:02:42

+0

哦,謝謝你。 – 2008-11-14 17:04:56

1

我用pymssql與標準的Python並喜歡它。如果你是只是尋找基本的數據庫訪問,可能比提及的替代方案更容易。

樣本code

+0

示例代碼鏈接已損壞。請修復或刪除。 – DavidJ 2014-03-11 13:12:40

+0

完成!鏈接已更新。 – 2014-03-18 03:29:09

12

pyodbc附帶ActiveState Python,它可以從here下載。一個最小的ODBC腳本連接到SQL Server 2005數據庫看起來是這樣的:

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] 
25

其他人似乎都在CPython的 - > SQL Server端覆蓋。如果你想使用IronPython的,你可以使用標準的ADO.NET API來與數據庫對話:

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() 

如果你已經有IronPython的,你不需要安裝任何東西。

很多文檔可用herehere

0

如果你想用CPython快速和骯髒的方式(也適用於3。X蟒蛇):

安裝PYWIN32安裝後蟒蛇http://sourceforge.net/projects/pywin32/files/pywin32/

導入以下庫: 進口ODBC

我創建用於獲取SQL Server 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

PyPyODBChttp://code.google.com/p/pypyodbc)在PyPy,Ironpython和CPython下工作。

This article顯示了訪問Python中的mssql的Hello World示例。

PyPyODBC與pyodbc具有幾乎相同的用法,因爲它可以被視爲重新實現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 

...