生成表的时候没问题,执行插入时,出现外键错误,且报错的说明和插入的根本不是一个地方,请老师指教
来源:3-8 .管理员-登录日志-操作日志数据模型设计
五四青年
2017-09-26
# coding:utf8
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import pymysql
from datetime import datetime
app=Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"]="mysql+pymysql://root:123.com@127.0.0.1:3306/movie"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]=True
db=SQLAlchemy(app)
#会员
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) #手机
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__="usrelog"
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"
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"
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__="previe"
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"
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"
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"
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") #管理员关联外键
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) #是否为超级管理员 9为超级管理员
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__="adminlog"
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__="oplog"
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()
role=Role(
name = "超级管理员",
auths=""
)
db.session.add(role)
db.session.commit()Traceback (most recent call last):
File "E:\py\film\film\app\models.py", line 180, in <module>
auths=""
File "<string>", line 2, in __init__
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 347, in _new_state_if_none
state = self._state_constructor(instance, self)
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\util\langhelpers.py", line 764, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\instrumentation.py", line 177, in _state_constructor
self.dispatch.first_init(self, self.class_)
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\event\attr.py", line 256, in __call__
fn(*args, **kw)
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\mapper.py", line 2982, in _event_on_first_init
configure_mappers()
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\mapper.py", line 2872, in configure_mappers
mapper._post_configure_properties()
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\mapper.py", line 1765, in _post_configure_properties
prop.init()
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\interfaces.py", line 184, in init
self.do_init()
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\relationships.py", line 1653, in do_init
self._process_dependent_arguments()
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\relationships.py", line 1710, in _process_dependent_arguments
self.target = self.mapper.mapped_table
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\util\langhelpers.py", line 764, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
File "C:\Users\XiPengfei\AppData\Local\Programs\Python\Python36\lib\site-packages\sqlalchemy\orm\relationships.py", line 1639, in mapper
% (self.key, type(argument)))
sqlalchemy.exc.ArgumentError: relationship 'adminlogs' expects a class or a mapper argument (received: <class 'sqlalchemy.sql.schema.Table'>)
请按任意键继续. . .
1回答
-
同学,你好,在关联的时候一定要注意大小写,我们关联的是类
adminlogs=db.relationship("adminlog",backref="admin") #管理员日志关联外键 oplogs=db.relationship("oplog",backref="admin") #操作日志关联外键改为
adminlogs=db.relationship("Adminlog",backref="admin") #管理员日志关联外键 oplogs=db.relationship("Oplog",backref="admin") #操作日志关联外键其他的如有这种问题,请更正。
012017-09-27
相似问题