flask-SQLALchemy是对SQLAL车门有进行了一个简单的封装,使得我们在flask中使用sqlalchemy更加的简单,数据库的初始化不再是通过create_engine,而是通过db
db的操作更简单,但是并没有相关的自动填充,这点比较费事
通过代码解析:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
引入的内容相对较少,
初始参数定义:
参数定义的内容与上文的内容是一样的:
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'flaskdatabase'
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql+pymysql://{}:{}@{}:{}/{}'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
app创建
app = Flask(__name__)
# 映射数据库
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app) # db为继承了SQLALchemy
定义模型类:(可以不自行创建表格,默认将类名小写化生成表格)
以下文为例,可以不写tablename 会自动将类名小写,生成user,而且,如果在tablename中定义其他的非user的名字,也会报错
class User(db.Model):
# __tablename__ = 'user'
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
name = db.Column(db.String(50))
# def __str__(self):
# return 'User(name:%s)' %self.name
def __repr__(self):
return 'User(name:%s)' % self.name
class Article(db.Model):
# __tablename__ = 'article'
#__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(50))
uid = db.Column(db.Integer,db.ForeignKey('user.id'))
author = db.relationship('User',backref='articles')
# db.drop_all()
# 这一行不能要,在新建之后再进行删除的话,在通过sqlyog刷新数据库的时候,会一直不显示数据,是要出问题的
# 对于使用sqlalchemy的drop_all的程序这样操作没问题,因为那时程序已经执行完成,不再调用这个数据库,查看是可以的
db.create_all()
#添加数据
user= User(name='cheney')
article = Article(title='python')
article.author = user
db.session.add(article)
db.session.add(user)
db.session.commit()
# 查询数据
user = User.query.all()
print(user)
或者:
user = db.session.query(User).all()
print(user)
@app.route('/')
def index():
return '这是首页'
if __name__ == '__main__':
app.run(debug=True)