以下所有代码均是在之前的基础上添加!!!
后面的章节均是如此
1. 使用 pymysql 模块连接数据库
2. 在模型中创建用户数据表
3. 初始化数据库、创建初始迁移脚本、应用初始迁移脚本

# 数据库配置信息 HOST = '127.0.0.1' PORT = 3306 DATABASE = 'qa' USER = 'root' PASSWORD = 'YDD5201314' DB_URI = 'mysql://{user}:{password}@{host}:{port}/{db}'.format(user=USER, password=PASSWORD, host=HOST, port=PORT, db=DATABASE) SQLALCHEMY_DATABASE_URI = DB_URI HOST = '127.0.0.1':
PORT = 3306:
DATABASE = 'qa':
qa。USER = 'root':
root。PASSWORD = 'YDD5201314':
YDD5201314。DB_URI:
SQLALCHEMY_DATABASE_URI = DB_URI:
SQLALCHEMY_DATABASE_URI,这是Flask-SQLAlchemy用来配置数据库连接的标准配置项。 from datetime import datetime from exts import db class UserModel(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True,autoincrement=True) username = db.Column(db.String(20), unique=True, nullable=False) password = db.Column(db.String(20), nullable=False) email = db.Column(db.String(50), unique=True, nullable=False) join_time = db.Column(db.DateTime(timezone=True), default=datetime.now) __tablename__ = 'users':
users。如果不指定,SQLAlchemy将默认使用类名的小写形式作为表名。id = db.Column(db.Integer, primary_key=True, autoincrement=True):
id的列。Integer。primary_key=True)。autoincrement=True)。username = db.Column(db.String(20), unique=True, nullable=False):
username的列。String,最大长度为20个字符。unique=True)。nullable=False)。password = db.Column(db.String(20), nullable=False):
password的列。String,最大长度为20个字符。nullable=False)。email = db.Column(db.String(50), unique=True, nullable=False):
email的列。String,最大长度为50个字符。unique=True)。nullable=False)。join_time = db.Column(db.DateTime(timezone=True), default=datetime.now):
join_time的列。DateTime,并启用时区支持(timezone=True)。default=datetime.now),即当插入新记录时,如果没有提供join_time的值,则会使用当前时间作为默认值。from flask_migrate import Migrate import pymysql # 使 pymysql 模块模仿 MySQLdb 模块,从而让使用 MySQLdb 的代码可以无缝切换到 pymysql # 必须放在第一行 pymysql.install_as_MySQLdb() # 这行代码初始化了 Flask-Migrate 扩展,用于处理数据库迁移 migrate = Migrate(app, db) pymysql.install_as_MySQLdb()
MySQLdb 作为MySQL数据库接口。MySQLdb 可能不易安装或不兼容某些系统或环境(例如Windows)。pymysql 是一个纯Python实现的MySQL客户端库,更易于安装和使用。pymysql.install_as_MySQLdb(),pymysql 模块就会以 MySQLdb 的身份出现,所有对 MySQLdb 的调用都会被重定向到 pymysql,从而让代码无需修改即可使用 pymysql。migrate = Migrate(app, db)
Migrate(app, db) 初始化了 Flask-Migrate,绑定了 Flask 应用实例 app 和 SQLAlchemy 实例 db。这允许你使用 Flask-Migrate 提供的命令行工具来创建、应用和管理数据库迁移。# 初始化数据库迁移环境: (venv) PS D:\Flask-zhiliao\flaskProject> flask db init Creating directory 'D:\\Flask-zhiliao\\flaskProject\\migrations' ... done Creating directory 'D:\\Flask-zhiliao\\flaskProject\\migrations\\versions' ... done Generating D:\Flask-zhiliao\flaskProject\migrations\alembic.ini ... done Generating D:\Flask-zhiliao\flaskProject\migrations\env.py ... done Generating D:\Flask-zhiliao\flaskProject\migrations\README ... done Generating D:\Flask-zhiliao\flaskProject\migrations\script.py.mako ... done Please edit configuration/connection/logging settings in 'D:\\Flask-zhiliao\\flaskProject\\migrations\\alembic.ini' before proceeding. # 创建初始迁移脚本: (venv) PS D:\Flask-zhiliao\flaskProject> flask db migrate INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.autogenerate.compare] Detected added table 'users' Generating D:\Flask-zhiliao\flaskProject\migrations\versions\7ea6eff38af5_.py ... done # 应用迁移脚本到数据库: (venv) PS D:\Flask-zhiliao\flaskProject> flask db upgrade INFO [alembic.runtime.migration] Context impl MySQLImpl. INFO [alembic.runtime.migration] Will assume non-transactional DDL. INFO [alembic.runtime.migration] Running upgrade -> 7ea6eff38af5, empty message (venv) PS D:\Flask-zhiliao\flaskProject> 执行完成后会多出来个文件夹

数据库同样也生成了两张表
