项目的初步建设
== 写这的目的是为了记录小白在flask(windows)利用MYSQL的知识 ==
总共建立5个文件:demo8.py(任意名称)(主文件,完成登陆功能),config.py(放置插件),exts.py(存储第三方库),manage.py(管理)models.py(放置模型)
#demo8.py 完成flask的基本框架
from flask import Flask,render_template,request,redirect,url_for,session
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object(config)
@app.route('/')
def index():
return render_template('demo.html')
#实现用户登陆的功能
@app.route('/login/',methods = ['GET','POST'])
def login():
if request.method == 'GET':
return render_template('demo.html')
else:
id = request.form.get('id')
password = request.form.get('password')
user = User.query.filter(User.password == password).first()
if user:
session['user_id'] = user.id
return redirect(url_for('index'))
else:
return u'您输入的学号或者密码错误'
if __name__=='__main__':
app.run(debug=True)
为了简化主文件的检查,建立放置插件的文件(这个习惯有利于以后遇见代码错误,方便回头检测)
#config.py
import os
#DEBUG可以更加清晰地指出代码错误所在位置
DEBUG = True
#SECRET_KEY:
#函数加密,session加密
SECRET_KEY = os.urandom(24)
#数据库的基本信息填写
hostname = '127.0.0.1'
port = '3307' #正常端口是3306,在此之前我已经占了,故改为3307
datebase = 'xsjz' #在代码实行前,自己需要先创立一个新的或填已存在的数据库名
usename = 'root'
password = 'root'
#mysqldb已经不支持python3及以后的版本连接数据库,此处使用了Pymysql
#数据库连接操作
DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(usename,password,hostname,port,datebase)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = True
DEBUG = True
在Flask中使用ORM
建立专门存放第三方库的初始信息
#存放第三方扩展包的初始化信息
#SQLAlchemy是flask用于数据库连接的ORM模式的第三方库
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
创建模型
from exts import db
#这里db.Model是强制要求这样填写,具体解释可查看SQLAlchemy的源代码
class User(db.Model):
#建立数据库的表
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
password = db.Column(db.String(100), nullable=False)
username = db.Column(db.String(50), nullable=False)
管理
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from demo8 import app
from exts import db #db = SQLAlchemy()
from models import User #导入要映射的模型
#让python支持命令行工作
manager = Manager(app)
#使用Migrate绑定app和db
migrate = Migrate(app,db)
#添加迁移脚本的命令到manager中,添加Migrate所有子命令到db下
manager.add_command('db',MigrateCommand)
if __name__ == "__main__":
manager.run()
此时在python端的任务已经全部完成,开始进行迁移文件
在此之前还需要进行开启虚拟环境的操作,打开终端cmd(win+R)
virtualenv\flask-env\Scripts
这是我当时虚拟环境的安装路径,找到你的activate文件所存在的位置
这里显示(flask-env)就代表成功进入虚拟环境,此时咱们就可以正式开始数据库迁移了
1.使用数据库迁移可以直接建表,而不是自己通过sql建立表,就是将关系型数据库的一张张表转化为Python中的一个个类。
2.可以追踪数据库的操作变化
1. 第一次进行迁移需要的操作( 在迁移工作前都需要先打开虚拟环境,且切到该文件的运行路径 == )
建立迁移仓库
python manage.py db init
操作成功后的情景
操作第一次后,就不需要再迁移初始化,但是第二个命令和第三个命令每次都要使用
2. 读取models.py中类的内容,生成版本文件,但并没有真正在数据库中添减;
python manage.py db migrate
此处是版本号,但并没有真正映射到数据库
*3.*真正迁移应用于数据库
python manage.py db upgrade