flaks项目,直接在Terminal窗口python models.py运行文件创建数据库表
表能创建成功,但是使用db.session.add()命令添加数据的时候报1452错
代码如下:
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.now) # 添加时间
def __str__(self):
return 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为超级管理员
role_id = db.Column(db.Integer, db.ForeignKey("role.id")) # 所属角色
addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间
if __name__ == "__main__":
# db.create_all()
from werkzeug.security import generate_password_hash
admin = Admin(
name="pipi2",
pwd=generate_password_hash("pipi2"),
is_super=0,
role_id=1
)
db.session.add(admin)
db.session.commit()
报错结果如下:
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`movie`.`a
dmin`, CONSTRAINT `admin_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`))')
[SQL: INSERT INTO `admin` (name, pwd, is_super, role_id, addtime) VALUES (%(name)s, %(pwd)s, %(is_super)s, %(role_id)s, %(addtime)s)]
[parameters: {'name': 'pipi1', 'pwd': 'pbkdf2:sha256:150000$OP1ctcJh$18525ea9b2dff88fa067f9864d32ca5ddba7ad9d341c17f9e32afaaddf1a81ad', 'is_supe
r': 0, 'role_id': 1, 'addtime': datetime.datetime(2019, 10, 28, 9, 1, 36, 12610)}]
原因是:在role这个表中没有id为1的索引值!!!
原因是:在role这个表中没有id为1的索引值!!!
原因是:在role这个表中没有id为1的索引值!!!
重要的事情要说三遍!!!
解决方法:先在role表中添加一行数据,id值为1,再在admin表中添加数据!!!
解决方法:先在role表中添加一行数据,id值为1,再在admin表中添加数据!!!
解决方法:先在role表中添加一行数据,id值为1,再在admin表中添加数据!!!
注意:
1,检查模型中加了”unique=True”属性的字段,在添加记录时是否添加了重复值。