SSブログ

ADODBAPI で SQLServer にアクセス [Python]

VBScript でごまかしていたけど、ちょっとややこしいことをしたいので Python が使いたくなった。
必要に迫られて試してみたのでメモしておく。

【インストール】
そもそも、Win32版の python じゃないとだめ。
さらに、win32com モジュールが必要なので、win32com モジュールが入ってない場合は、
Win32 Extensions をインストールする
http://python.net/crew/skippy/win32/Downloads.html

次に、adodbapi のインストール
ここ↓からたどり着けるところから、adodbapi-2.0.1.zip をダウンロード。
http://sourceforge.net/projects/adodbapi
zip ファイルを解凍して中にある setup.bat を実行したらインストール完了。
(adodbapi を site-packages にコピーしてもいいんだと思う)

【使い方】
いつも接続文字列の指定の仕方が判らなくなるので、ここで使い方を例示しておくことにする。
(データーベースが SQL Server の場合)

import adodbapi
conn_str = """Provider=SQLOLEDB;
        Data Source=db_host;
        User ID=bob;
        Password=secret;
        Initial Catalog=TestDB"""
conn = adodbapi.connect(conn_str)
cur = conn.cursor()
cur.execute("select name from member")
for c in cur.fetchall():
    print c[0].encode('cp932')

最後の行の print c[0].encode('cp932') の代わりに print c[0] でもコンソールには表示されるが、ファイルにリダイレクトするときに破綻する。つまり、結果が unicode で返される。
多分、SQL文に日本語が含まれる場合は execute に unicode 文字列で渡す必要があるだろう(試してないけど)。サンプルのように SQL文が ASCII 文字だけなら大丈夫。

ユーザー foo のデフォルトデーターベースに接続すればよいのであれば、パラメータ Initial Catalog を渡す必要はない。


nice!(0)  コメント(6) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 6

Fomalhaut

SQL Server にアクセスできるようにする
Python Extension を探していたので助かりました。

Python2.4 と2.5 の win32all はこちらにおいてあるようです↓
https://sourceforge.net/project/showfiles.php?group_id=78018
by Fomalhaut (2006-05-20 10:55) 

ai

SQL Serverにアクセスしようと奮闘しているのですが、
うまく出来ません。

教えていただきたいのですが、
以下の構文で、

conn_str = """Provider=SQLOLEDB;
Data Source=db_host;
User ID=bob;
Password=secret;
Initial Catalog=TestDB"""

「Provider」、「Data Source」、「User ID」、「Password」、「Initial Catalog」の
設定値は、どのように調べれば良いのでしょうか?

お手数をおかけします、よろしくお願いします。
by ai (2006-06-08 10:26) 

nakagami

Provider は、SQLServer なら常に SQL OLEDB です。
Data Source っていうのは、SQLServer の動いている Windows サーバーですよ
Initial Catalog は、接続したいデーターベースの名前です。
by nakagami (2006-06-11 19:50) 

JanTrum

Ciprofloxacin Replace Amoxicillin <a href=http://apcialisle.com/#>Buy Cialis</a> Pyridium Increased Urination <a href=http://apcialisle.com/#>Cialis</a> Cialis E Impotenza
by JanTrum (2020-03-13 11:22) 

JanTrum

Effexor Xr India <a href=https://abcialisnews.com/#>where to buy cialis cheap</a> Levitra Prix Paris <a href=https://abcialisnews.com/#>generic cialis tadalafil</a> Propecia Hormones Male Pattern Baldness
by JanTrum (2020-04-17 16:43) 

T.Kumagai

かなり昔の記事にすみません。
仕事で昔から使用しているツールがMicrosoft SQL Compact Edition 3.5を使用しており、どうにかしてこのファイルにアクセスしたいのですが、助けて頂けませんでしょうか?
Python は3.9.1でadodbapiを使用しています。
わざとパスワードを間違えると、"認証されませんでした"と出るのでパスワード間違いの線はなく、conn.dbms_nameやconn.dbms_versionは表示されるので、connection stringも間違ってなさそうだと思います。何かヒントだけでもいただけると有難いです。
<Code>
conn_str = r"Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\pyuser\localDB.sdf;SSCE:Database Password='private';"

conn = adodbapi.connect( conn_str )
print(conn.connection_string)
print(conn.dbms_name)
print(conn.dbms_version)

cur=conn.cursor()
cur.execute("select firstName, lastName from users")
---------------------------------------------------------------
<Output>#こんな長いの貼ってすいません。
Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data Source=C:\pyuser\localDB.sdf;SSCE:Database Password='private';
Microsoft SQL Server Compact
03.50.0000
Traceback (most recent call last):
File "C:\Users\takes\AppData\Local\Programs\Python\Python39\lib\site-packages\adodbapi\adodbapi.py", line 682, in _execute_command
recordset, count = self.cmd.Execute()
File "<COMObject ADODB.Command>", line 2, in Execute
File "C:\Users\takes\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\dynamic.py", line 271, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
pywintypes.com_error: (-2147352567, '例外が発生しました。', (0, 'Microsoft SQL Server Compact OLE DB Provider', '複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。', None, 0, -2147217887), None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\pyuser\db1.py", line 12, in <module>
cur.execute("select firstName, lastName from users")
File "C:\Users\takes\AppData\Local\Programs\Python\Python39\lib\site-packages\adodbapi\adodbapi.py", line 875, in execute
self._execute_command()
File "C:\Users\takes\AppData\Local\Programs\Python\Python39\lib\site-packages\adodbapi\adodbapi.py", line 690, in _execute_command
self._raiseCursorError(klass, _message)
File "C:\Users\takes\AppData\Local\Programs\Python\Python39\lib\site-packages\adodbapi\adodbapi.py", line 563, in _raiseCursorError
eh(self.connection, self, errorclass, errorvalue)
File "C:\Users\takes\AppData\Local\Programs\Python\Python39\lib\site-packages\adodbapi\apibase.py", line 57, in standardErrorHandler
raise errorclass(errorvalue)
adodbapi.apibase.DatabaseError: (-2147352567, '例外が発生しました。', (0, 'Microsoft SQL Server Compact OLE DB Provider', '複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。', None, 0, -2147217887), None)
Command:
select firstName, lastName from users
Parameters:
[]
by T.Kumagai (2021-02-24 00:20) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント