1.flask連接mysql數(shù)據(jù)庫
首先要安裝flask-sqlalchemy模塊
pip install flask-sqlalchemy
然后數(shù)據(jù)庫配置
2.建立模型
要先創(chuàng)建一個SQLAlchemy對象db示弓,把a(bǔ)pp放進(jìn)去
db = SQLAlchemy(app)
然后創(chuàng)建模型
會員模型
class User(db.Model):
"""會員"""
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True) # 編號
name = db.Column(db.String(100), unique=True) # 昵稱
pwd = db.Column(db.String(100)) # 密碼
email = db.Column(db.String(100), unique=True) # 郵箱
phone = db.Column(db.String(11), unique=True) # 手機(jī)號
info = db.Column(db.Text)
face = db.Column(db.String(255)) # 頭像
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
uuid = db.Column(db.String(255), unique=True) # 唯一標(biāo)識符
userlogs = db.relationship('Userlog', backref='user') # 會員日志外鍵關(guān)系關(guān)聯(lián)
comments = db.relationship("Comment", backref='user') # 評論外鍵關(guān)系關(guān)聯(lián)
moviecols = db.relationship("Moviecol", backref='user') # 電影收藏外鍵關(guān)系關(guān)聯(lián)
def __repr__(self):
return "<User %r>" % self.name
會員登錄日志模型
class UserLog(db.Model):
"""會員登錄日志"""
__tablename__ = "userlog"
id = db.Column(db.Integer, primary_key=True)
ip = db.Column(db.String(100)) # 登陸IP
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 登陸時間
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所屬會員
def __repr__(self):
return "<Userlog %r>" % self.id
標(biāo)簽?zāi)P?/p>
class Tag(db.Model):
"""標(biāo)簽"""
__tablename__ = "tag"
id = db.Column(db.Integer, primary_key=True) # 編號
name = db.Column(db.String(100), unique=True) # 標(biāo)題
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
movies = db.relationship("Movie", backref='tag') # 電影外鍵關(guān)聯(lián)
def __repr__(self):
return "<Tag %r>" % self.name
電影模型
class Movie(db.Model):
"""電影"""
__tablename__ = "movie"
id = db.Column(db.Integer, primary_key=True) # 編號
title = db.Column(db.String(255), unique=True) # 標(biāo)題
url = db.Column(db.String(255), unique=True) # 地址
info = db.Column(db.Text) # 簡介
logo = db.Column(db.String(255), unique=True) # 封面
star = db.Column(db.SmallInteger) # 星級
playnum = db.Column(db.BigInteger) # 播放量
commentnum = db.Column(db.BigInteger) # 評論量
area = db.Column(db.String(255)) # 上映地區(qū)
release_time = db.Column(db.Date) # 上映時間
length = db.Column(db.String(100)) # 播放時間
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
tag_id = db.Column(db.Integer, db.ForeignKey('tag.id ')) # 所屬標(biāo)簽
comments = db.relationship("Comment", backref='movie') # 評論外鍵關(guān)聯(lián)關(guān)系
moviecols = db.relationship("Moviecol", backref='movie') # 電影收藏外鍵關(guān)系關(guān)聯(lián)
def __repr__(self):
return "<Movie %r>" % self.title
電影上映預(yù)告模型
class Preview(db.Model):
"""上映預(yù)告"""
__tablename__ = "preview"
id = db.Column(db.Integer, primary_key=True) # 編號
title = db.Column(db.String(255), unique=True) # 標(biāo)題
logo = db.Column(db.String(255), unique=True) # 封面
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
def __repr__(self):
return "<Preview %r>" % self.title
評論模型
class Comment(db.Model):
"""評論"""
__tablename__ = "comment"
id = db.Column(db.Integer, primary_key=True) # 編號
content = db.Column(db.Text) # 評論內(nèi)容
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所屬電影
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所屬用戶
def __repr__(self):
return "<Comment %r>" % self.id
電影收藏模型
class Moviecol(db.Model):
"""電影收藏"""
__tablename__ = "moviecol"
id = db.Column(db.Integer, primary_key=True) # 編號
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所屬電影
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所屬用戶
def __repr__(self):
return "<Moviecol %r>" % self.id
權(quán)限模型
class Auth(db.Model):
"""權(quán)限"""
__tablename__ = "auth"
id = db.Column(db.Integer, primary_key=True) # 編號
name = db.Column(db.String(100), unique=True) # 名稱
url = db.Column(db.String(255), unique=True) # 地址
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
def __repr__(self):
return "<Auth %r>" % self.name
角色模型
class Role(db.Model):
"""角色"""
__tablename__ = "role"
id = db.Column(db.Integer, primary_key=True) # 編號
name = db.Column(db.String(100), unique=True) # 名稱
auths = db.Column(db.String(600))
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
admins = db.relationship("Admin", backref='role') # 管理員外鍵關(guān)系關(guān)聯(lián)
def __repr__(self):
return "<Role %r>" % self.name
管理員模型
class Admin(db.Model):
"""管理員"""
__tablename__ = 'admin'
id = db.Column(db.Integer, primary_key=True) # 編號
name = db.Column(db.String(100), unique=True) # 管理員賬號
pwd = db.Column(db.String(100)) # 管理員密碼
is_super = db.Column(db.SmallInteger) # 是否為超級管理員,0為超級管理員
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加時間
role_id = user_id = db.Column(db.Integer, db.ForeignKey('role.id')) # 所屬角色
adminlogs = db.relationship("AdminLog", backref='admin') # 管理員登陸日志外鍵關(guān)系關(guān)聯(lián)
oplogs = db.relationship("OpLog", backref='admin') # 管理員操作日志外鍵關(guān)系關(guān)聯(lián)
def __repr__(self):
return "<Admin %r>" % self.name
管理員登錄日志模型
class AdminLog(db.Model):
"""管理員登錄日志"""
__tablename__ = "adminlog"
id = db.Column(db.Integer, primary_key=True)
ip = db.Column(db.String(100)) # 登陸IP
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 登陸時間
admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所屬管理員
def __repr__(self):
return "<Userlog %r>" % self.id
操作日志模型
class OpLog(db.Model):
"""操作日志"""
__tablename__ = "oplog"
id = db.Column(db.Integer, primary_key=True) # 編號
ip = db.Column(db.String(100)) # 登陸IP
reason = db.Column(db.String(600)) # 操作原因
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 登陸時間
admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所屬管理員
def __repr__(self):
return "<OpLog %r>" % self.id
到這里模型就建好了廊佩。
注意:
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:liulunan@127.0.0.1:3306/movies"
這里一定要加個pymysql闷祥,不然就會報錯。
在模型的最后加一個把模型創(chuàng)建到數(shù)據(jù)庫對應(yīng)的表议经。
if __name__ == '__main__':
db.create_all()
然后運(yùn)行models.py文件甥厦,mysql數(shù)據(jù)庫中就會看到對應(yīng)的表了出牧。