How do I configure mysql the same way as sqlite in flask?

Issue

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.')

Solution

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.

Answered By – huang

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published