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 を渡す必要はない。
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)
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)
Provider は、SQLServer なら常に SQL OLEDB です。
Data Source っていうのは、SQLServer の動いている Windows サーバーですよ
Initial Catalog は、接続したいデーターベースの名前です。
by nakagami (2006-06-11 19:50)
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)
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)
かなり昔の記事にすみません。
仕事で昔から使用しているツールが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)