mysql - python開發(fā)web service 中數(shù)據(jù)庫鏈接和釋放應(yīng)該怎么處理?
問題描述
用tornado開發(fā)web service服務(wù)。服務(wù)端根據(jù)接收到的json數(shù)據(jù)對(duì)mysql數(shù)據(jù)庫進(jìn)行查詢,并把結(jié)果反饋給用戶。采用sqlalchemy對(duì)數(shù)據(jù)庫進(jìn)行操作,以下對(duì)數(shù)據(jù)庫鏈接的創(chuàng)建,釋放是否合理呢?
class db: def __init__(self,db_ip=’’,db_name=’’,db_user=’’,db_pass=’’,db_charset=’’):self.db_str = ’mysql+pymysql://’+db_user+’:’+db_pass+’@’+db_ip+’:3306/’+db_name+’?’+’charset=’+db_charsetself.engine = create_engine(self.db_str, encoding=’utf-8’, echo=False)self.dbsession = sessionmaker(bind=self.engine) def return_dbsession(self):return self.dbsession def close_session(self):self.session.close()
database = db(db_ip=’127.0.0.1’, db_name=’data_utf’, db_user=’root’, db_pass=’root’, db_charset=’utf8’)
處理post請(qǐng)求代碼如下
class rcvRequest(tornado.web.Request): session = scoped_session(database.return_dbsession())() response = [] for ctt in session.query(table).filter(table.ID == id):response.append(ctt) self.write(str(response)) session.close()
問題解答
回答1:不合理,每來一次請(qǐng)求就建立一次連接不是很浪費(fèi)嗎?sqlalchemy可以很好的幫你管理連接池,找找資料,用連接池吧.
回答2:代碼調(diào)整為以下這種方式是否合理?
def db(db_ip=’’,db_name=’’,db_user=’’,db_pass=’’,db_charset=’’):db_str = ’mysql+pymysql://’+db_user+’:’+db_pass+’@’+db_ip+’:3306/’+db_name+’?’+’charset=’+db_charsetengine = create_engine(self.db_str, encoding=’utf-8’, echo=False)dbsession = sessionmaker(bind=self.engine)return dbsessiondatabase =db(db_ip=’127.0.0.1’, db_name=’data_utf’, db_user=’root’, db_pass=’root’, db_charset=’utf8’)class rcvRequest(tornado.web.Request): def initialize(self):self.session = scoped_session(database)() @tornado.gen.coroutine def post(self):response = []for ctt in self.session.query(table).filter(table.ID == id): response.append(ctt)self.write(str(response))def on_finish(self):self.session.close()回答3:
還是建議找個(gè)ORM吧。你這樣一個(gè)鏈接就請(qǐng)求一次搞不好數(shù)據(jù)服務(wù)就掛掉了。
回答4:請(qǐng)參考https://github.com/PyMySQL/To...
相關(guān)文章:
1. java - 如何在Fragment中調(diào)用Activity的onNewIntent?2. python - (初學(xué)者)代碼運(yùn)行不起來,求指導(dǎo),謝謝!3. javascript - js 對(duì)中文進(jìn)行MD5加密和python結(jié)果不一樣。4. mysql里的大表用mycat做水平拆分,是不是要先手動(dòng)分好,再配置mycat5. javascript - h5上的手機(jī)號(hào)默認(rèn)沒有識(shí)別6. 為什么python中實(shí)例檢查推薦使用isinstance而不是type?7. html5 - H5 SSE的本質(zhì)是什么?8. window下mysql中文亂碼怎么解決??9. python的文件讀寫問題?10. sass - gem install compass 使用淘寶 Ruby 安裝失敗,出現(xiàn) 404
