HDEラボの桜井です。
昨日に引き続き、Twistedネタを。
CentOSのPythonの場合、付属のドライバでPostgreSQLへ接続しようとすると、「postgresql-python」を使うことになります。
#実際は、pg.pyとpgdb.pyがインストールされます。
Twistedから使う前に、簡単にpgdb.pyの説明をしておきます。
下記はローカルホストのtestデータベースへ接続して、USERSテーブルの内容を表示する簡単なサンプルです。
これでコマンドライン上で結果が表示されますね。
昨日に引き続き、Twistedネタを。
CentOSのPythonの場合、付属のドライバでPostgreSQLへ接続しようとすると、「postgresql-python」を使うことになります。
#実際は、pg.pyとpgdb.pyがインストールされます。
Twistedから使う前に、簡単にpgdb.pyの説明をしておきます。
下記はローカルホストのtestデータベースへ接続して、USERSテーブルの内容を表示する簡単なサンプルです。
import pgdb db = pgdb.connect(database='test', host='127.0.0.1:5432', user='admin', password='password') cursor = db.cursor() cursor.execute("SELECT id,name,age from USERS") while True: row = cursor.fetchone() if not row: break print "id=%d, name=%s, age=%d\n" % (row[0], row[1], row[2]) cursor.close() db.close() exit
これでコマンドライン上で結果が表示されますね。
ここからは、Twistedを使ってネットワーク越しにデータをPostgreSQLへ保存したりする場合を説明します。
その場合には、"twisted.enterprise.adbapi.ConnectionPool"を使用します。
また、データベースのドライバはpgdb.pyを使用します。
下記は、入力をデータベースへ保存する簡単なEchoサーバのサンプルです。
echo.tac
プログラムを動作させるためには、下記のように実行してデーモン化します。
ローカルホストのTCP2345番ポートにTelnetで接続して何かを入力すると、データベースへどんどん保存されていきます。
その場合には、"twisted.enterprise.adbapi.ConnectionPool"を使用します。
また、データベースのドライバはpgdb.pyを使用します。
下記は、入力をデータベースへ保存する簡単なEchoサーバのサンプルです。
echo.tac
from twisted.internet.protocol import Protocol,Factory from twisted.application import service,internet from twisted.enterprise import adbapi class Echo(Protocol): def __init__(self): self.db = adbapi.ConnectionPool("pgdb", database='test', host='localhost:5432', user='admin', password='password') self.db.connect() def __del__(self): self.db.close() def dataReceived(self, data): self.db.runOperation("INSERT INTO message_log (comment) values(?)", (data)) self.transport.write(data) factory = Factory() factory.protocol = Echo myServer = internet.TCPServer(2345, factory) application = service.Application('Echo') myServer.setServiceParent(application)
プログラムを動作させるためには、下記のように実行してデーモン化します。
$ twistd -oy echo.tac
ローカルホストのTCP2345番ポートにTelnetで接続して何かを入力すると、データベースへどんどん保存されていきます。
Leave a comment