PythonからOracleに接続し、データを登録&更新する
昨日の続き。
INSERTは複数行の登録が一度にできるけど、UPDATEは複数回execute呼ばないといけないらしい。
# Insert default rows rows = [(1, 'Bob', 35, 'I like dogs'), (2, 'Kim', 27, 'I like birds')] cur.bindarraysize = 2 cur.setinputsizes(int, 20, int, 100) cur.executemany("insert into cx_people(id, name, age, notes) values (:1, :2, :3, :4)", rows) con.commit() #Update cur = con.cursor() statement = 'update cx_pets set owner = :1 where owner = :2 and type = :3' cur.execute(statement, (2, 1, 'dog')) con.commit()
オラクルにつないでデータを取得する
仕事で表題のスクリプトを作成することになったのでその時のメモ。
環境:
Windows8.1 (64bit) /
Anaconda (Python 3.6.4) /
Oracle 11g
Oracleに接続
cx_Oracleを使うと良いらしい。ということでOracle Clientも併せてインストール
※Anadondaのpipが古い場合はバージョンアップしておく
cx_Oracleのインストール
python -m pip install cx_Oracle --upgrade
Oracle Instanct Clientのインストール
Instant Client for Microsoft Windows (x64) 64-bit
Pythonから接続
import cx_Oracle conn = cx_Oracle.connect(user='user', password='pass', dsn='localhost:port/xe') cur = conn.cursor()
UnicodeDecodeError
接続先のOracle11gはshift-jis(JA16SJISTILDE)なのでPythonで扱えない文字が入っているとエラーになる。
解決方法が見つからない…
追記
UnicodeDecodeErrorはおまじないを唱えておけば大丈夫そう。
# -*- coding:utf-8 -*- import cx_Oracle import os os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE" #おまじない
oracle10gアンインストール[Windows版]
開発機に入れたOracle10g。 実は11gでした、ということでアンインストールして入れ直ししたときのメモ。
Oracle10gのアンインストール
データベースの削除
ふつうDBCAが入っているのでそれを使って削除します。
今回は文字コードの変更の関係でコマンドでデータベースを作成していたので、
コマンドで削除します(やり方が正しいかどうかは不明)まず、排他モードでマウントする必要があるため、サービスを停止する。
set ORACLE_SID=XE
sqlplus / as sysdba
startup mount exclusive restrict;
一応確認
select * from v$instance;
削除
drop database;
データべースを削除したらOracle本体を削除
→ソフトウェアのアンインストールレジストリを削除
参考 削除および再インストール
RubyでSQLServerへつなぎたい2
前回失敗したRDBIじゃなくてtiny_tdsで行けるらしいので試してみた。
環境:Windows8.1 (64bit)
Ruby:2.4.4p296
Bundler:1.16.2
DB:SQL Server 2017
①接続準備
rubyで
require 'tiny_tds' require 'bundler/setup'
と書くとつながるらしいので、これが動くように必要なものをインストール&準備する。
gem install tiny_tds gem install bundler bundle init bundle install --path vendor/bundle
②SQLServerのポートの確認
デフォルトで動的になっているので1433固定にしておく。
◆スタート
→ Microsoft SQL Server 2017
→ 構成ツール
→ SQL Server 構成マネージャー
でsql Server Configuration Managerを開いたら、左のメニューの「SQL Server ネットワークの構成」を開き、
[インスタンス名] のプロトコルをクリック。
「TCP/IP」をクリックして「IPアドレス」タブを選択し、一番下のIPALLを設定しておく。
③いざ接続
require 'tiny_tds' require 'bundler/setup' client = TinyTds::Client.new host: '[my_hostname]', port: 1433, database: '[db]', azure: false results = client.execute 'SELECT * FROM my_table' results.each do |row| puts row['columname'] end
で出力されたのでOK.
RubyでSQLServerへつなぎたい
つなぎたいのだが、ドライバーのインストールでエラーが発生してしまう。
環境:Windows8.1 (64bit)
Ruby:2.5.1 →2.4.4
※インストーラー使用
まずドライバーが合ってる?、というところなのだが、これが一番よくわからない。
最初、調べてみたらRuby/DBIがヒットしたのでこれを使うのかと思ってinstallしたが、
そもそもこのRuby/DBIは1.8までしかサポートしていないということなので、
Ruby2.0以上の場合はRDBIをインストールする模様。
しかし、試しに入れてみるとドライバーのインストールでエラー。
gem install pg gem install rdbi gem install rdbi-driver-odbc --ここでエラーが発生
エラーログを見ると、
C:/Ruby24-x64/include/ruby-2.4.0/ruby/ruby.h:2170:12: error: invalid operands to binary / (have 'int' and 'char *')
実行時エラーになっている。
なんで??
これをggってみても記事が見つからず、途方にくれたのでメモっておく。
参考: