【发布时间】:2021-09-03 14:56:46
【问题描述】:
几个小时以来,我一直在尝试将我的 python 文件图像保存到我的数据库表中,但由于转换问题并显示以下错误通知而无济于事:
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query.
照片的表格列的数据类型为 varbinary(max)。我在这里进行了研究,发现了成员的类似帖子和 cmet,但没有一个可以帮助解决我的问题。
如何在 python 中将字符串值转换为字节以使我能够将记录保存在数据库中?我试图使用字节(文件名),它没有用。我也试过了:
base64.encodebytes(filename)
我是在导入base64之后这样做的,还是不行。然后我尝试了:
base(filename,'ascii')
还是不行。
我想要一种情况,当我从对话框上传照片并将其附加到文件中时,上传的照片可以保存在数据库表中为其保留的列中,并且该列的数据类型为 varbinary(max )。以下是我的代码:
try:
fname, _ = QFileDialog.getOpenFileName(self, 'Open', 'c:\\', "image Files (*.jpg *.png)")
strfn = bytes(fname,'ascii')
self.pixL.setPixmap(QPixmap(fname).scaled(250, 250))
self.pixTx.setText(fname)
self.pixL.setText(strfn)
except Exception as err:
print(err)
插入语句如下:
self.cursor.execute(
"INSERT INTO pixx1(photop, photopath)"
"VALUES(?,?)",
#the parameter placholder for pyodbc is the question mark sign (?), whereas that of MySql is %s
(self.pixL.text(),
self.pixTx.text())
【问题讨论】:
-
只是一个建议:为什么不将文件上传到云上的某种存储中,然后将指向它的链接放在您的数据库中?
-
你好@KevinEaverquepedo,这是一个不使用互联网的桌面应用程序,所以我不想为图片使用网址。
-
然后将它们保存在您的服务器可访问的某个目录(静态文件)中,并将路径添加到您的数据库中的静态文件?
-
这就是问题所在。图像已经在一个目录中。请再次检查我的代码。 @KevinEaverquepedo
-
@CEO 如果您只保存文件名,那么在 photopath 列中使用 varbinary 有什么意义?列数据类型应更改为 nvarchar,因为文件名是 unicode 字符串,而不是二进制数据。那么就不需要转换任何东西了。使用 varbinary 的唯一原因是您希望数据库本身存储图像数据(即文件内容)。
标签: python sql database pyqt5 varbinary