PythonまたはIronPythonでmssqlにアクセスする最も簡単な方法は何ですか?
-
08-07-2019 - |
質問
パーソナルコンピュータでmssql 2005を実行し、いくつかのpythonスクリプトを実行したいデータベースを使用しています。私はデータに本当に簡単なアクセスをする方法を探しています。いくつかのselectステートメントを実行し、データを処理し、結果をテキストファイルに保存することもできます。
残念ながら、Pythonについて少し知っていて、データベースについて少し知っていても、読んでいるだけで、ライブラリが自分のやりたいことをしているかどうかを知るのは非常に難しい。理想的には、他のバージョンのmssqlで動作し、無料で商用使用を許可され、簡単に使用でき、ironpythonでも動作するものが欲しいです。
解決
cPythonで SQL Alchemy を使用します(IronPythonで動作するかどうかはわかりません) 。 Hibernate / nHibernateを使用したことがあれば、かなりおなじみでしょう。それが少し冗長すぎる場合は、 Elixir を使用できます。 SQL Alchemyの。これらのいずれかを使用するには、 pyodbc が必要ですが、これは非常に簡単なインストールです。
もちろん、ORMを使用せずに単純なSQLを作成する場合は、pyodbcが必要です。
他のヒント
他の誰もが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を持っている場合、他のものをインストールする必要はありません。
pyodbcにはActivestate Pythonが付属しており、こちら。 SQL Server 2005データベースに接続するための最小限の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にアクセスする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
...
CPythonを使用した迅速で汚れた方法が必要な場合(3.Xのpythonでも動作します):
pythonをインストールした後に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
注:上記の機能を使用する場合は、これら2つのライブラリwinregとreをインポートする必要があります
次に、ここで定義されている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のすべてのバージョンで実行されます。