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 不需要


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM