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