python - Flask新人求问,数据库初始化在什么时候做?
PHP中文网
PHP中文网 2017-04-17 17:25:35
[Python讨论组]

数据库初始化工作,比如建表这种工作,肯定一开始就做好了。但是我没有找到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()的函数,在里面做建表的事,但是每次请求,这个函数都会调用,觉得浪费了,所以这个工作该放在哪里,或者用什么配置来做?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
PHP中文网

把它分成另一个模块,然后以单例模式注入到你的主模块中。

PHPz

请求钩子before_first_request中执行应该可以。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号