我有一个表单,用户可以通过multiselect上传一个或多个图像。这些图像属于一个房间。图像存储在服务器上的静态文件夹中。在数据库中,我保存了“pfad”属性中图像的路径“。我已分配给pfad
属性unique=True
,因为每个图像都应该被识别,因为不同的用户可能会命名同样的图像。
在我的models.py(SQLalchemy)中有一个Bild
类,这是属性:
pfad = Column(Text, nullable=False, unique=True)
如果图像名称不同,一切正常,但如果抛出IntegrityError,我的代码就无法处理。我的想法是:如果出现IntegrityError,我会拆分文件名并为其添加一个数字,因此pfad
将是另一个:
我的静态文件夹中有图片fun.jpg
,有人上传了另一张名为fun.jpg
的图片 - >我的代码应该“有趣”+“1”。 +“jpg” - > fun1.jpg
然后保存。但我仍然得到IntegrityErrors。
多数民众赞成我这样做:
images = request.files.getlist("bild")
if new_zimmer:
db_session.add(new_zimmer)
db_session.commit()
for img in images:
filename = secure_filename(img.filename)
try:
print "file existiert nicht"
img.save(UPLOAD_FOLDER + filename)
new_bild = Bild(pfad=filename, zimmer_id=new_zimmer.id)
db_session.add(new_bild)
except IntegrityError:
print "file existiert"
filename_list = filename.split(".")
new_filename = filename_list[0] + "1." + filename_list[1]
img.save(UPLOAD_FOLDER + new_filename)
new_bild = Bild(pfad=new_filename, zimmer_id=new_zimmer.id)
db_session.add(new_bild)
db_session.commit()
相关部分始于for img in images
。我试图只提供相关的代码片段。 Hoope有人可以帮助我处理这个问题。感谢
修改
如果我移动db_session.commit()
,我会收到此错误:
try:
print "file existiert nicht"
img.save(UPLOAD_FOLDER + filename)
new_bild = Bild(pfad=filename, zimmer_id=new_zimmer.id)
db_session.add(new_bild)
db_session.commit()
#else:
except IntegrityError:
print "file existiert"
filename_list = filename.split(".")
new_filename = filename_list[0] + "1." + filename_list[1]
img.save(UPLOAD_FOLDER + new_filename)
new_bild = Bild(pfad=new_filename, zimmer_id=new_zimmer.id)
db_session.add(new_bild)
db_session.commit()
错误:
sqlalchemy.exc.InvalidRequestError
InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (sqlite3.IntegrityError) column pfad is not unique [SQL: u'INSERT INTO bilder (pfad, zimmer_id) VALUES (?, ?)'] [parameters: ('zimmer2_01.jpg', 11)]
答案 0 :(得分:0)
您的代码是否包含完整性错误的定义?
这可能会帮助: 从sqlalchemy.exc导入IntegrityError