flask 链接mysql数据库 小坑

#config.py


MYSQL_NAME = 'root'
MYSQL_PASSWORD = 'zyms90bdcs'
MYSQL_HOST = 'xxxx'
MYSQL_POST = '3306'
MYSQL_DBNAME = 'flask_sql'
MYSQL_CHARSET = 'utf8'

# SQLALCHEMY_DATABASE_URI = 'mysql://{}:{}@{}:{}/{}?charset={}'.format(MYSQL_NAME,MYSQL_PASSWORD,
#                                                                      MYSQL_HOST,MYSQL_POST,
#                                                                      MYSQL_DBNAME,MYSQL_CHARSET)

SQLALCHEMY_DATABASE_URI = 'mysql://{}:{}@{}:{}/{}'.format(MYSQL_NAME,MYSQL_PASSWORD,
                                                                     MYSQL_HOST,MYSQL_POST,
                                                                     MYSQL_DBNAME)

这是链接数据库文件的配置,如果你在models文件中创建了db表,并进行创建 (shell还是直接路由进行创建) create_all()

#models

import pymysql
from flask_sqlalchemy import SQLAlchemy

pymysql.install_as_MySQLdb()

db = SQLAlchemy()

def init_db(app):
    db.init_app(app)


class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer,primary_key=True,autoincrement=True)
    u_name = db.Column(db.String(20),unique=True)
    u_id = db.Column(db.Integer,unique=True)

# 创建一个 User 的模型,数据库中创建一个 user 的表 

# views.py

from flask import Blueprint
from App.models import User, db

blue = Blueprint('base1',__name__)


@blue.route('/create_all/')
def create_all():

    db.create_all()

    return "DB create success"

很容易出现一个问题 

sqlalchemy.exc.InternalError: (InternalError) (1049, "Unknown database 'dome'") None None

有过学过mysql的都会知道,但基础不好的会遇到.

原因是

create_all()
这个函数只是创建表,并不创建数据





更新还有一个坑
当你开开心心完成了上述操作,再次打开(我的方式)创建表发型又出现问题了
ModuleNotFoundError
ModuleNotFoundError: No module named 'MySQLdb'

看在明显是mysqldb 出现问题了,但是我们没有包叫mysqldb啊 只有mysql

终于在网上找到 可能是pymysql 出现问题

在models.py文件中  或者配置文件中也行

import pymysql
pymysql.install_as_MySQLdb()

或者在

MYSQL_NAME = 'root'
MYSQL_PASSWORD = 'zyms90bdcs'
MYSQL_HOST = 'xxxxx'
MYSQL_POST = '3306'
MYSQL_DBNAME = 'flask_sql'
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(MYSQL_NAME,MYSQL_PASSWORD,
                                                                     MYSQL_HOST,MYSQL_POST,
                                                                     MYSQL_DBNAME)


app.config['SQLALCHEMY_DATABASE_URI'] = config.SQLITE_URI

在mysql路径中增加一个驱动 +pymsql  字段

sqlite 不需要

原文地址:https://www.cnblogs.com/zengxm/p/11129864.html