python-3.x FLASK:属性错误:“MySQL”对象没有属性“Model”

ppcbkaq5  于 2023-01-18  发布在  Python
关注(0)|答案(1)|浏览(185)

我刚开始学习Flask。我不知道如何初始化一个mysql数据库。我需要使用Alchemy的某个版本吗?我可以不使用mysql模块来代替吗?当我在谷歌上搜索任何关于使用flask和mysql的文档时,我感到困惑,我得到了许多点击,包括slqalchemy,flak-mysql,flak-mysqldb,flak-mysql-connector。每个例子都是不同的,我都要斗鸡眼了。
有这么多的例子,我怀疑我的语法是混乱的。我终于能够显示模式与以下命令,所以我假设我关闭:

# msql_connector.py

from application import mysql

print(mysql)

conn = mysql.connect()
cursor = conn.cursor()

cursor.execute('''SHOW SCHEMAS;''')
rv = cursor.fetchall()

for db in rv:
    print(db)

但是我现在想要初始化数据库或者只是能够按照下面的方式向它写入值,我不确定我是否真的需要首先初始化或者我是否可以在运行时定义模型和添加数据。

我的错误:

AttributeError: 'MySQL' object has no attribute 'Model'

我的主文件:

# __init__.py

from flask import Flask
from config import Config
from flaskext.mysql import MySQL

app = Flask(__name__)
app.config.from_object(Config)

mysql = MySQL()
mysql.init_app(app)

from application import routes

下一个数据库定义:

# models.py

import flask
from application import mysql

class User(mysql.Model):

user_id    = mysql.IntField(unique=True )
first_name = mysql.StringField( max_length = 50 )
last_name  = mysql.StringField( max_length = 50 )
email      = mysql.StringField( max_length = 50 )
password   = mysql.StringField( max_length = 50 )

def __init__(self, user_id, first_name, last_name, email, password):
    self.user_id = user_id
    self.first_name = first_name
    self.last_name = last_name
    self.email = email
    self.password = password

我的配置:

# config.py

import os
from flask_mysql_connector import MySQL

class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'djfdsjdsj4skldjess85'

    MYSQL_DATABASE_HOST = 'localhost'
    MYSQL_DATABASE_USER = 'flasker'
    MYSQL_DATABASE_PASSWORD = '**********'
    MYSQL_DATABASE_DB = 'UTA_Enrollment'

最后但同样重要的是:

import json
from application import app
from application import mysql
from flask import render_template, request, Response
from application.models import User, Course, Enrollment

@app.route("/user")
def user():
    conn = mysql.connect()
    cursor = conn.cursor()

    cursor.execute('''SHOW SCHEMAS;''')
    rv = cursor.fetchall()

    User(user_id=1, first_name="John", last_name="Doh", email="jd@domain.com", password="abc123")
    User(user_id=2, first_name="Jane", last_name="Doh", email="jad@domain.com", password="abc123")

    users = User.objects.all()

    return render_template("user.html", users=users)

因此,当我转到http://url/user时,我希望能够将上述数据写入数据库。

我的规格:

Python 3.9.6
click==8.1.3
Flask==2.2.2
Flask-MySQL==1.5.2
flask-mysql-connector==1.1.0
Flask-WTF==1.0.1
importlib-metadata==6.0.0
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.1
mysql-connector-python==8.0.31
numpy==1.24.1
pandas==1.5.2
protobuf==3.20.1
PyMySQL==1.0.2
python-dateutil==2.8.2
python-dotenv==0.21.0
pytz==2022.7
six==1.16.0
Werkzeug==2.2.2
WTForms==3.0.1
zipp==3.11.0

因此,总结一下:
1.我是否必须使用某种形式的Alchemy来运行这种类型的语法:标题= mysql.字符串字段(最大长度= 100)
1.我只限于在cursor中运行execute。execute('''SHOW SCHEMAS;''')
1.我是否需要初始化数据库(包括先创建表和字段?

n9vozmp4

n9vozmp41#

所以我找不到MySQL模块的优雅解决方案。我一轮又一轮地使用python-mysql、python-mysql-connector和flak-msyql。事实证明,使用flak-sqlalchemy相当容易让它做我需要的事情。

pip安装Flask-SQLAlchemy

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy(app)

class Config(object):
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://..."
    SQLALCHEMY_TRACK_MODIFICATIONS = False

class Course(db.Model):
course_id   = db.Column( db.String(10), primary_key=True )
title       = db.Column( db.String(100), nullable=False )
description = db.Column( db.String(255), nullable=False )
credits     = db.Column( db.String(255), nullable=False )
term        = db.Column( db.String(25), nullable=False )

相关问题