Table 'user' is already defined for this MetaData instance.
来源:3-8 .管理员-登录日志-操作日志数据模型设计
慕码人8635563
2018-05-17
出现如下报错后
Table 'user' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.。
按照您说的,在
在每个model下面加上__table_args__ = {"useexisting": True}
比如:
class User(db.Model):
"""会员"""
__tablename__ = "user"
__table_args__ = {"useexisting": True}
又出现如下错误:
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'admin.role_id' could not find table 'role_id' with whi
ch to generate a foreign key to target column 'None'
更改后代码如下
# coding:utf8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
import pymysql
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@127.0.0.1:3306/movie"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
db = SQLAlchemy(app)
# 会员
class User(db.Model):
__tablename__ = "user"
__table_args__ = {"useexisting": True}
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) # 手机号码
info = db.Column(db.Text) # 个性简介
face = db.Column(db.String(255), unique=True) # 头像
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 注册时间
uuid = db.Column(db.String(255), unique=True) # 唯一标识符
userlogs = db.relationship('Userlog', backref='user') # 会员日志外键关系关联
comments = db.relationship('Comment', backref='user') # 评论外键关系关联
moviecols = db.relationship('Moviecol', backref='user') # 电影收藏外键关系关联
def __repr__(self):
return "<User %r>" % self.name
# 会员登录日志
class Userlog(db.Model):
__tablename__ = "userlog"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属会员
ip = db.Column(db.String(100)) # 登录IP
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 登录时间
def __repr__(self):
return "<Userlog %r>" % self.id
# 标签
class Tag(db.Model):
__tablename__ = "tag"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
name = db.Column(db.String(100), unique=True) # 标题
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间
movies = db.relationship("Movie", backref='tag') # 电影外键关系关联
def __repr__(self):
return "<Tag %r>" % self.name
# 电影
class Movie(db.Model):
__tablename__ = "movie"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
title = db.Column(db.String(255), unique=True) # 标题
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) # 评论量
tag_id = db.Column(db.Integer,db.ForeignKey('tag.id')) # 所属标签
area = db.Column(db.String(255)) # 上映地区
release_time = db.Column(db.Date) # 上映时间
length = db.Column(db.String(100)) # 播放时间
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间
comments = db.relationship("Comment", backref='movie') # 评论外键关系关联
moviecols = db.relationship("Moviecol", backref='movie') # 收藏外键关系关联
def __repr__(self):
return "<Movie %r>" % self.title
# 上映预告
class Preview(db.Model):
__tablename__ = "preview"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
title = db.Column(db.String(255), unique=True) # 标题
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"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
content = db.Column(db.Text) # 内容
movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所属电影
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属用户
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间
def __repr__(self):
return "<Comment %r>" % self.id
# 电影收藏
class Moviecol(db.Model):
__tablename__ = "moviecol"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
movie_id = db.Column(db.Integer, db.ForeignKey('movie.id')) # 所属电影
user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 所属用户
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间
def __repr__(self):
return "<Moviecol %r>" % self.id
# 权限
class Auth(db.Model):
__tablename__ = "auth"
__table_args__ = {"useexisting": True}
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"
__table_args__ = {"useexisting": True}
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') # 管理员外键关系关联
def __repr__(self):
return "<Role %r>" % self.name
# 管理员
class Admin(db.Model):
__tablename__ = "admin"
__table_args__ = {"useexisting": True}
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为超级管理员
role_id = db.Column(db.Integer, (db.ForeignKey('role_id'))) # 所属角色
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 添加时间
adminlogs = db.relationship("Adminlog", backref='admin') # 管理员登录日志外键
oplogs = db.relationship("Oplog", backref='admin') # 管理员操作日志外键关系关联
def __repr__(self):
return "<Admin %r>" % self.name
# 管理员的登录日志
class Adminlog(db.Model):
__tablename__ = "userlog"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员
ip = db.Column(db.String(100)) # 登录IP
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 登录时间
def __repr__(self):
return "<Adminlog %r>" % self.id
# 操作日志
class Oplog(db.Model):
__tablename__ = "userlog"
__table_args__ = {"useexisting": True}
id = db.Column(db.Integer, primary_key=True) # 编号
admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员
ip = db.Column(db.String(100)) # 登录IP
reason = db.Column(db.String(600)) # 操作原因
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow) # 登录时间
def __repr__(self):
return "<Oplog %r>" % self.id
if __name__ == "__main__":
db.create_all()
去掉在每个model下面加上__table_args__ = {"useexisting": True} 后 即为源码
1回答
-
rustgopy
2018-05-30
同学,在每个model中加上extend_existing=True
00
相似问题