我刚开始学习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.我是否需要初始化数据库(包括先创建表和字段?
1条答案
按热度按时间n9vozmp41#
所以我找不到MySQL模块的优雅解决方案。我一轮又一轮地使用python-mysql、python-mysql-connector和flak-msyql。事实证明,使用flak-sqlalchemy相当容易让它做我需要的事情。
pip安装Flask-SQLAlchemy