This is the suggested configuration from the Doc for sqlite. How would it be for mysql?
import sqlite3
import click
from flask import current_app, g
from flask.cli import with_appcontext
def get_db():
if 'db' not in g:
g.db = sqlite3.connect(
current_app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES
)
g.db.row_factory = sqlite3.Row
return g.db
def close_db(e=None):
db = g.pop('db', None)
if db is not None:
db.close()
def init_db():
db = get_db()
with current_app.open_resource('schema.sql') as f:
db.executescript(f.read().decode('utf8'))
I would like to use the same command init-db to initialize the mysql
@click.command('init-db')
@with_appcontext
def init_db_command():
"""Clear the existing data and create new tables."""
init_db()
click.echo('Initialized the database.')
In ext.py
:
import pymysql
db = None
def get_db():
global db
if db is None:
db = pymysql.connect("localhost","testuser","test123","TESTDB")
return db
In other module, if you want to execute sql:
from ext import get_db
db = get_db()
db.cursor.execute(sql)
db
is the singleton object. I suggest to use the sqlalchemy in Flask.
I would def. recommend you to use Flask-SQLAlchemy , so you do not have to deal with low level SQL problems.
As a plus, you could use eg SQLite
locally for testing, and MySQL
or Postgresql
in production, without changed your code (only your config).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.