|
|
|
|
JsTestDriverを使用するとJavaScriptの自動テストができます。 http://code.google.com/p/js-test-driver/
テストの手順は次のような感じです。 1.JsTestDriverのサーバーを起動します。 java -jar JsTestDriver.jar --port 4224 2.テストを実行したいブラウザで上記のサーバーに接続します。 FireFox、IE,Safariなど一度に複数のクライアントが接続できます。 3.テストを記述します。また、同時にフォルダの構成などを記述する設定ファイルを書きます。 このあたりの書き方は以下を参照 http://blog.asial.co.jp/10514.テストを記述したフォルダで以下のようなコマンドを実行します。 java -jar JsTestDriver.jar --tests all これにより、現在、port4224に接続していた全クライアントのブラウザで同じテストがじっこうされます。 さて、問題はテストのログに日本語を使うと文字化けすることです。 http://qiita.com/opengl-8080/items/009eb0a2b89f3751ecd1
じつは、この問題は、パッチで回避できます。 http://confluence.jetbrains.com/display/WI/Patched+JsTestDriver-1.3.5上記のページからJARファイルを直接ダウンロードもできますし、 1.3.5のバージョンに差分をあてる方法があります。 以下のソースをもとに http://js-test-driver.googlecode.com/archive/v1.3.5.zip下記の内容を適用してビルドすればよいでしょう。 http://git.jetbrains.org/?p=idea/contrib.git;a=blob_plain;f=JsTestDriver/lib/jstestdriver-core/jstd-1.3.5-issue-85-fix.patch;hb=HEADgitで開発中のバージョンをみると上記のパッチは次回のリリースに適用されそうな感じです。 テストケースのメソッド名は"test xxxx"とつけないと認識しないようだ。 TestCase("ObservableNotifyObserversTest", { "エラーが発生してもNotifyが実行される : function() { // これは認識しない }, "test エラーが発生してもNotifyが実行される" :function() { // これは認識する } });
node.js で簡単なチャットをつくる。 こんな感じポーリングしないでリアルタイムに動く。 1.現在チャット中の部屋の一覧がでるので、名前と入りたいルーム名(もしくは新規の名前)を作って入室 2.入室したら、色を適当に変えて発言しよう 3.人さまからはこんな感じでみえる。
More
目的PythonでPostgresqlを操作する 環境
Python 2.x / 3.c PostgresSQL 9.3 psycopg2をつかう Windowsの場合は以下のページからダウンロードしてExeを実行 http://www.stickpeople.com/projects/python/win-psycopg/テーブル定義CREATE TABLE t01prefecture ( pref_cd integer NOT NULL, pref_name character varying(10), CONSTRAINT t01prefecture_pkey PRIMARY KEY (pref_cd) ) WITH ( OIDS=FALSE ); ALTER TABLE t01prefecture OWNER TO postgres;
PostgresSQLのユーザ定義関数
CREATE OR REPLACE FUNCTION test_sp(IN from_cd integer, IN to_cd integer) RETURNS TABLE(code integer, name varchar) AS $$ DECLARE BEGIN RETURN QUERY SELECT PREF_CD,PREF_NAME FROM t01Prefecture WHERE PREF_CD BETWEEN from_cd AND to_cd; END; $$ LANGUAGE plpgsql;
Python3.x# -*- coding: cp932 -*- # Winddows の場合は以下からダウンロード # http://www.stickpeople.com/projects/python/win-psycopg/ #
import psycopg2
try: cnn = psycopg2.connect("dbname=Sample001 host=localhost user=postgres password=xxxx") cur = cnn.cursor()
#試験データの整理 pref_cd = 100 cur.execute("""DELETE FROM t01prefecture WHERE PREF_CD >= %d""" % (pref_cd,)) cnn.commit()
print("単純なSELECT文==========================") from_id = 45 to_id = 999 cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], row[1]))
print("コミットの試験==========================") pref_cd = 100 pref_name = "モテモテ国" cur.execute("""INSERT INTO t01prefecture(PREF_CD, PREF_NAME) VALUES ('%s', '%s')""" % (pref_cd, pref_name))
pref_cd = 101 pref_name = "野望の国" cur.execute("""INSERT INTO t01prefecture(PREF_CD,PREF_NAME) VALUES ('%s', '%s')""" % (pref_cd, pref_name,)) cnn.commit() cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], row[1]))
print("ロールバックの試験==========================") pref_cd = 102 pref_name = "ロール" cur.execute("""INSERT INTO t01prefecture(PREF_CD,PREF_NAME) VALUES ('%s', '%s')""" % (pref_cd, pref_name,))
cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], row[1]))
print("-------------------------") cnn.rollback() cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], row[1]))
print("ユーザー定義==========================") cur.execute("""SELECT * FROM test_sp(%d,%d)""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], row[1]))
cur.close() cnn.close()
except (psycopg2.OperationalError) as e: print (e)
python2.x
# -*- coding: cp932 -*- # Winddows の場合は以下からダウンロード # http://www.stickpeople.com/projects/python/win-psycopg/ #
import psycopg2
try: cnn = psycopg2.connect("dbname=Sample001 host=localhost user=postgres password=xxxxx") cur = cnn.cursor()
#試験データの整理 pref_cd = 100 cur.execute("""DELETE FROM t01prefecture WHERE PREF_CD >= %d""" % (pref_cd,)) cnn.commit()
print("単純なSELECT文==========================") from_id = 45 to_id = 999 cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], unicode(row[1],'utf-8')))
print("コミットの試験==========================") pref_cd = 100 pref_name = u"モテモテ国" cur.execute(u"""INSERT INTO t01prefecture(PREF_CD, PREF_NAME) VALUES ('%s', '%s')""" % (pref_cd, pref_name))
pref_cd = 101 pref_name = u"野望の国" cur.execute(u"""INSERT INTO t01prefecture(PREF_CD,PREF_NAME) VALUES ('%s', '%s')""" % (pref_cd, pref_name,)) cnn.commit() cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0],unicode(row[1],'utf-8')))
print("ロールバックの試験==========================") pref_cd = 102 pref_name = u"ロール" cur.execute(u"""INSERT INTO t01prefecture(PREF_CD,PREF_NAME) VALUES ('%s', '%s')""" % (pref_cd, pref_name,))
cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], unicode(row[1],'utf-8')))
print("-------------------------") cnn.rollback() cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], unicode(row[1],'utf-8')))
print("ユーザー定義==========================") cur.execute("""SELECT * FROM test_sp(%d,%d)""" % (from_id, to_id, )) rows = cur.fetchall() for row in rows: print("%d %s" % (row[0], unicode(row[1],'utf-8')))
cur.close() cnn.close()
except (psycopg2.OperationalError) as e: print (e)
雑感
Python3系は文字コードを意識しなくてもよさげ、Python2.XはUTF8で帰ってくるので、一旦UNICODEに変換してやらねばならない。 ストアドプロシージャーはORACLEのPL/SQLに近い。ただ、テーブル型を戻り値にする関数を指定できるので、ORACLEほど結果セットを返すのがしんどくない。
PostgreSQLでは下記のSQLで独自の型が作成できる。 CREATE TYPE int_txt_type AS (code integer, name varchar);
作成後にこの型をpgAdminで確認するには次のようにする。
1.ファイルメニューのオプションを選択 2.表示タブで型にチェックをつける
目的
Pythonでcx_Oracleを用いてOracleを操作する 環境Python 2.7 または 3.3 1.Oracleクライアントをインストールする。この際、開発者用の環境をつくる。 2.以下からダウンロードしてインストールするか、easy_installする。 cx_Oracle http://cx-oracle.sourceforge.net/Pythonのコード# -*- coding: cp932 -*- # cx_Oracleを用いたPythonでのORACLE操作 #1.Oracleクライアントをインストールする。 # この際、開発者用の環境をつくる。 # (おそらく、OCIが必要?) # #2.以下からダウンロードしてインストールするか、easy_installする。 # cx_Oracle # http://cx-oracle.sourceforge.net/ import cx_Oracle import os os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE" try: tns = cx_Oracle.makedsn("localhost", 1521, "Sample") conn = cx_Oracle.connect("user", "pass", tns) cur = conn.cursor() from_cd = 45 to_cd = 200 cur.execute("""SELECT * FROM T01PREFECTURE WHERE PREF_CD BETWEEN :arg1 AND :arg2""", arg1=from_cd, arg2=to_cd) rows = cur.fetchall() for r in rows: print("%d : %s" % (r[0], r[1]))
print ("===================") print ("100を消す") cur.execute("""DELETE FROM T01PREFECTURE WHERE PREF_CD=:arg1""", arg1=100)
cur.execute("""SELECT * FROM T01PREFECTURE WHERE PREF_CD BETWEEN :arg1 AND :arg2""", arg1=from_cd, arg2=to_cd) rows = cur.fetchall() for r in rows: print("%d : %s" % (r[0], r[1]))
print ("------------------") print ("100 を追加") cur.execute("""INSERT INTO T01PREFECTURE VALUES (:arg1, :arg2)""", arg1=100, arg2="あたた") conn.commit()
cur.execute("""SELECT * FROM T01PREFECTURE WHERE PREF_CD BETWEEN :arg1 AND :arg2""", arg1=from_cd, arg2=to_cd) rows = cur.fetchall() for r in rows: print("%d : %s" % (r[0], r[1]))
print ("===================") print ("101追加") cur.execute("""INSERT INTO T01PREFECTURE VALUES (:arg1, :arg2)""", arg1=101, arg2="北斗")
cur.execute("""SELECT * FROM T01PREFECTURE WHERE PREF_CD BETWEEN :arg1 AND :arg2""", arg1=from_cd, arg2=to_cd) rows = cur.fetchall() for r in rows: print("%d : %s" % (r[0], r[1]))
print ("------------------") print ("ロールバック") conn.rollback() cur.execute("""SELECT * FROM T01PREFECTURE WHERE PREF_CD BETWEEN :arg1 AND :arg2""", arg1=from_cd, arg2=to_cd) rows = cur.fetchall() for r in rows: print("%d : %s" % (r[0], r[1]))
except (cx_Oracle.DatabaseError) as ex: error, = ex.args print (error.message)
使用感OCI経由でやっているっぽいのでORACLEクライアントをインストールせねばならないのが結構面倒。 接続方法に癖がある。あと文字コードの指定は環境変数で。 ORACLEのPL/SQLはSQLSERVERと違って結果セット返さない。 (配列を返せるが、ここでは面倒なので実験していない) 明示的にCOMMITしないと変更は破棄される。
|
|
検索
カテゴリ
最新の記事
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ
|
|