【问题标题】:Django error: Invalid column name 'id'Django 错误:列名“id”无效
【发布时间】:2013-12-31 19:27:35
【问题描述】:

我很难理解为什么我的一个查询失败了。

我正在使用 pyodbc 连接到 Django 应用程序上的 SQL Server 数据库。我所有的其他查询都工作正常,除了一个。以下是相关信息:

型号

class ReportTemplate(models.Model):
    name = models.TextField(db_column='Name', blank=True)
    template = models.TextField(db_column='Template', blank=True)

    class Meta:
        db_table = 'ReportTemplateTbl'

功能

我在下面的示例中使用了“抽象”,因为它是一个已知值。

get_initial(self):
    my_template = ReportTemplate.objects.get(name='Abstract')
    return {'abstract': my_template.template}

错误

应用程序运行该函数时,返回如下错误:

('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'id' 无效。(207) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver ][SQL Server]无法准备语句。(8180)")

变量 info 似乎表明 pyodb 正在尝试搜索

u'SELECT [ReportTemplateTbl].[id], [ReportTemplateTbl].[Name], [ReportTemplateTbl].[Template] FROM [ReportTemplateTbl] WHERE [ReportTemplateTbl].[Name] = ? '

我真的很想了解我在这里做错了什么,并试图避免进行手动查询。提前致谢!

【问题讨论】:

    标签: python sql-server django django-models pyodbc


    【解决方案1】:

    根据django docs,自动创建id列。此行为可以被 Model 子类中的 specifying another attribute as the primary key 覆盖:

    class ReportTemplate(models.Model):
        name = models.TextField(db_column='Name', blank=True, primary_key=True)
        template = models.TextField(db_column='Template', blank=True)
    
        class Meta:
            db_table = 'ReportTemplateTbl'
    

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 2023-03-18
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多