简体   繁体   中英

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM