数据库初始化工作,比如建表这种工作,肯定一开始就做好了。但是我没有找到flask有什么初始化的方法,我直接写在appname.py这个文件里的时候,每次请求都会运行,这不就浪费了吗?网站部署后,数据库表肯定是要建好了的,用户请求的时候肯定不需要再去做建表的事。
所以想问数据库初始化的方法写在哪?
初学flask,代码部署在新浪云SAE,现在只是刚开始学,学到使用数据库,数据库用的MySQLdb,因为SAE内置支持的这个。
上下代码:
import MySQLdb
from flask import Flask, g, request
app = Flask(__name__)
app.debug = True
from sae.const import (MYSQL_HOST, MYSQL_HOST_S,
MYSQL_PORT, MYSQL_USER, MYSQL_PASS, MYSQL_DB
)
status = __name__
initdbStatus = 'initdbStatus'
def init_db():
db = MySQLdb.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS,
MYSQL_DB, port=int(MYSQL_PORT))
cursor = db.cursor()
cursor.execute("create table if not exists demo (id INT NOT NULL AUTO_INCREMENT,title text not null,text text not null, PRIMARY KEY (id))")
cursor.execute('select * from demo')
cursor.close()
global initdbStatus
initdbStatus = 'initdbStatus:finished'
@app.before_request
def before_request():
global status
print status
g.db = MySQLdb.connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS,
MYSQL_DB, port=int(MYSQL_PORT))
print status
@app.teardown_request
def teardown_request(exception):
if hasattr(g, 'db'): g.db.close()
init_db()
我写了个init_db()的函数,在里面做建表的事,但是每次请求,这个函数都会调用,觉得浪费了,所以这个工作该放在哪里,或者用什么配置来做?
把它分成另一个模块,然后以单例模式注入到你的主模块中。