首先說下,由于最新的 0.8 版還是開發版本,因此我使用的是 0.79 版,API 也許會有些不同。
因為我是搭配 MySQL InnoDB 使用,所以使用其他數據庫的也不能完全照搬本文。
接著就從安裝開始介紹吧,以 Debian/Ubuntu 為例(請確保有管理員權限):
1.MySQL
代碼如下:apt-get install mysql-server
apt-get install mysql-client
apt-get install libmysqlclient15-dev
2.python-mysqldb
代碼如下:apt-get install python-mysqldb
3.easy_install
代碼如下:wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
4.MySQL-Python
代碼如下:easy_install MySQL-Python
5.SQLAlchemy
代碼如下:easy_install SQLAlchemy
如果是用其他操作系統,遇到問題就 Google 一下吧。我是在 Mac OS X 上開發的,途中也遇到些問題,不過當時沒記下來……
值得一提的是我用了 MySQL-Python 來連 MySQL,因為不支持異步調用,所以和 Tornado 不是很搭。不過性能其實很好,因此以后再去研究下其他方案吧……
裝好后就可以開始使用了:
代碼如下:from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
DB_CONNECT_STRING = 'mysql+mysqldb://root:123@localhost/ooxx?charset=utf8'
engine = create_engine(DB_CONNECT_STRING, echo=True)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()
這里的 DB_CONNECT_STRING 就是連接數據庫的路徑。“mysql+mysqldb”指定了使用 MySQL-Python 來連接,“root”和“123”分別是用戶名和密碼,“localhost”是數據庫的域名,“ooxx”是使用的數據庫名(可省略),“charset”指定了連接時使用的字符集(可省略)。
create_engine() 會返回一個數據庫引擎,echo 參數為 True 時,會顯示每條執行的 SQL 語句,生產環境下可關閉。
sessionmaker() 會生成一個數據庫會話類。這個類的實例可以當成一個數據庫連接,它同時還記錄了一些查詢的數據,并決定什么時候執行 SQL 語句。由于 SQLAlchemy 自己維護了一個數據庫連接池(默認 5 個連接),因此初始化一個會話的開銷并不大。對 Tornado 而言,可以在 BaseHandler 的 initialize() 里初始化:
代碼如下:
class BaseHandler(tornado.web.RequestHandler):
def initialize(self):
self.session = models.DB_Session()
def on_finish(self):
self.session.close()
對其他 Web 服務器來說,可以使用 sqlalchemy.orm.scoped_session,它能保證每個線程獲得的 session 對象都是唯一的。不過 Tornado 本身就是單線程的,如果使用了異步方式,就可能會出現問題,因此我并沒使用它。
拿到 session 后,就可以執行 SQL 了:
代碼如下:session.execute('create database abc')
print session.execute('show databases').fetchall()
新聞熱點
疑難解答