いくつかのpythonスクリプトを実行したいデータベースを備えたパーソナルコンピューターでmssql2005を実行しています。データに対して非常に簡単なアクセスを行う方法を探しています。 。いくつかのselectステートメントを実行し、データを処理して、結果を含むテキストファイルをpython保存してもらいたいと思います。
残念ながら、私はpythonとデータベースについて少し知っていますが、ライブラリが私が望むことを実行するかどうかを読むだけで判断するのは非常に困難です。理想的には、他のバージョンのmssqlで機能するもののように、無料で商用利用が許可されており、使いやすく、おそらくironpythonで機能します。
私は SQL Alchemy をcPythonで使用しています(IronPythonで動作するかどうかはわかりませんが)。 Hibernate/nHibernateを使用したことがあれば、かなりおなじみです。それが少し冗長すぎる場合は、 Elixir を使用できます。これは、SQLAlchemyの上にある薄いレイヤーです。これらのいずれかを使用するには、 pyodbc が必要ですが、これは非常に簡単なインストールです。
もちろん、ORMを使用せずにストレートSQLを記述したい場合は、pyodbcが必要です。
他の誰もがcPython-> SQLServer側をカバーしているようです。 IronPythonを使用する場合は、標準のADO.NETAPIを使用してデータベースと通信できます。
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をお持ちの場合は、他に何もインストールする必要はありません。
pyodbcにはActivestatePythonが付属しており、 ここ からダウンロードできます。 SQL Server2005データベースに接続するための最小限のodbcスクリプトは次のようになります。
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]
また、CPythonで pymssql を正常に使用しています。 (SQLAlchemyの有無にかかわらず)。
http://adodbapi.sourceforge.net/ CPythonまたはIronPythonのいずれかで使用できます。とても満足しています。
PyPyODBC ( http://code.google.com/p/pypyodbc )は、PyPy、Ironpython、およびCPythonで動作します。
この記事 は、PythonでmssqlにアクセスするHelloWorldサンプルを示しています。
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
...
CPythonを使用した迅速で汚い方法が必要な場合(3.X pythonでも機能します):
インストール後にPYWIN32をインストールしますpython http://sourceforge.net/projects/pywin32/files/pywin32/
次のライブラリをインポートします:import 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
注:上記の関数を使用する場合は、winregとreの2つのライブラリもインポートする必要があります。
次に、ここで定義されている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のすべてのバージョンで仕事を成し遂げます。