生成表的时候没问题,执行插入时,出现外键错误,且报错的说明和插入的根本不是一个地方,请老师指教
来源: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
相似问题