国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python SQLAlchemy基本操作和常用技巧(包含大量實例,非常好)

2020-02-23 05:22:33
字體:
供稿:網(wǎng)友

首先說下,由于最新的 0.8 版還是開發(fā)版本,因此我使用的是 0.79 版,API 也許會有些不同。
因為我是搭配 MySQL InnoDB 使用,所以使用其他數(shù)據(jù)庫的也不能完全照搬本文。

接著就從安裝開始介紹吧,以 Debian/Ubuntu 為例(請確保有管理員權(quán)限):
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

如果是用其他操作系統(tǒng),遇到問題就 Google 一下吧。我是在 Mac OS X 上開發(fā)的,途中也遇到些問題,不過當時沒記下來……
值得一提的是我用了 MySQL-Python 來連 MySQL,因為不支持異步調(diào)用,所以和 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 就是連接數(shù)據(jù)庫的路徑?!癿ysql+mysqldb”指定了使用 MySQL-Python 來連接,“root”和“123”分別是用戶名和密碼,“l(fā)ocalhost”是數(shù)據(jù)庫的域名,“ooxx”是使用的數(shù)據(jù)庫名(可省略),“charset”指定了連接時使用的字符集(可省略)。
create_engine() 會返回一個數(shù)據(jù)庫引擎,echo 參數(shù)為 True 時,會顯示每條執(zhí)行的 SQL 語句,生產(chǎn)環(huán)境下可關(guān)閉。
sessionmaker() 會生成一個數(shù)據(jù)庫會話類。這個類的實例可以當成一個數(shù)據(jù)庫連接,它同時還記錄了一些查詢的數(shù)據(jù),并決定什么時候執(zhí)行 SQL 語句。由于 SQLAlchemy 自己維護了一個數(shù)據(jù)庫連接池(默認 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 服務(wù)器來說,可以使用 sqlalchemy.orm.scoped_session,它能保證每個線程獲得的 session 對象都是唯一的。不過 Tornado 本身就是單線程的,如果使用了異步方式,就可能會出現(xiàn)問題,因此我并沒使用它。

拿到 session 后,就可以執(zhí)行 SQL 了:
代碼如下:session.execute('create database abc')
print session.execute('show databases').fetchall()

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 玉山县| 包头市| 安康市| 无锡市| 安阳市| 宿松县| 新民市| 临颍县| 禹城市| 沙洋县| 资溪县| 安西县| 开封县| 荃湾区| 石嘴山市| 和平县| 镶黄旗| 惠水县| 金秀| 新民市| 建昌县| 江山市| 巴彦淖尔市| 定远县| 松阳县| 丰宁| 额济纳旗| 黑水县| 桐庐县| 陵水| 万源市| 开阳县| 彭阳县| 栖霞市| 和顺县| 宜兰市| 民权县| 南投县| 许昌市| 武冈市| 东阳市|