【问题标题】:Django 2.0.9 using dockerized MS Sql Server on Mac, varbinary conversion errorDjango 2.0.9 在 Mac 上使用 dockerized MS Sql Server,varbinary 转换错误
【发布时间】:2018-10-16 23:55:09
【问题描述】:

我假设这不是一个常见的场景——但是我在我的 Mac 上运行 Django 2.0.9、pyodbc 4.0.24、django-pyodbc-azure 2.0.4.1 和 ODBC 17,与在 Docker 中运行的 SQL Server 交谈, Microsoft SQL Server 2017。

由于我无法控制的原因,我正在建模一个系统,其中上传存储为 BLOB,SQL Server 用语中的 varbinary 类型。

无论我做什么,只要我声明一个 BLOB 类型并尝试加载一个夹具(没有 BLOB),我就会收到错误:

Could not load mytype.MyType(pk=3455): ('22018', '[22018] [FreeTDS][SQL Server]不允许从数据类型 varchar 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询。(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/fixtures/0011_mydata.json':无法加载mytype.MyType(pk=3455):('22018','[22018] [FreeTDS][SQL Server]隐式转换不允许将数据类型 varchar 转换为 varbinary(max)。使用 CONVERT 函数运行此查询。(257) (SQLExecDirectW)')

我相信这个错误是一个红鲱鱼,真正的问题在于特定于 Mac 的驱动程序 Docker 中的 Sql Server

感谢任何帮助!

【问题讨论】:

    标签: sql-server django docker


    【解决方案1】:

    问题,在这种情况下是连接字符串:

    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 是问题所在。我不知道为什么,但从链中删除它解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多