我假设这不是一个常见的场景--但是我在我的Mac上运行Django 2.0.9,pyodbc 4.0.24,django-pyodbc-azure 2.0.4.1和ODBC 17,与运行在Microsoft SQL Server 2017 Docker中的SQL Server对话。
出于我无法控制的原因,我正在为一个系统建模,在这个系统中,上传被存储为一个BLOB,用Server的术语来说是一个变量类型。
无论我做什么,只要声明BLOB类型并尝试加载一个夹具(没有BLOB),我就会得到错误:
无法加载mytype.MyType(pk=3455):('22018','22018SQL ServerImplicit从数据类型varchar转换为varbinary(max)。使用转换函数运行此查询。(257) (SQLExecDirectW)')
模式如下:
class MyType(models.Model):
id = models.BigAutoField(primary_key=True)
desc = models.CharField(
max_length=4000, blank=True, null=True)
name = models.CharField(max_length=8, blank=True, null=True)
blah_id = models.BigIntegerField(blank=True, null=True)
related_thing = models.ForeignKey(
Thing,
on_delete=models.PROTECT,
blank=True,
null=True)
... etc ...
pdf = models.BinaryField(blank=True, null=True) # here is the sticking point
class Meta:
# etc除了教学大纲和教学大纲之外,我总是使用一个夹具加载数据,但总是出错:
安装夹具‘/path/ to /max/0011_mydata.json’:未能加载mytype.MyType(pk=3455):('22018','22018SQL ServerImplicit‘从数据类型varchar转换为varbinary(max)。请使用转换函数运行此查询。(257) (SQLExecDirectW)')
我认为这个错误是个问题,真正的问题在于一个特定于Docker中的Mac <-> Sql Server的驱动程序。
任何帮助都是非常感谢的!
发布于 2018-10-16 15:55:09
在本例中,问题是连接字符串:
DATABASES = {
# Microsoft SQL Server version
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'foo',
'USER': 'blah',
'PASSWORD': 'password',
'HOST': '0.0.0.0',
'PORT': '1433',
'OPTIONS': {
'driver': 'FreeTDS',
},
},
}应该是
DATABASES = {
# Microsoft SQL Server version
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'foo',
'USER': 'bar',
'PASSWORD': 'password',
'HOST': '0.0.0.0',
'PORT': '1433',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
},
}FreeTDS是问题所在。我不知道为什么,但是把它从链条上去掉就解决了问题。
https://stackoverflow.com/questions/52822085
复制相似问题