【问题标题】:'id' value not incrementing automatically using pydobc on MS SQL'id' 值不会在 MS SQL 上使用 pydobc 自动递增
【发布时间】:2020-01-17 13:36:21
【问题描述】:

我收到此错误:

pyodbc.IntegrityError: ('23000', "[23000] [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert the value NULL into column 'id', table 'XXXX.dbo.logs'; column does not allow nulls. INSERT fails. (515) (SQLExecDirectW); [23000] [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated. (3621)")

当我想将新行推送到表时会发生这种情况:

   sql = ''' INSERT INTO logs(name,ip,page,socket,date)
              VALUES(?,?,?,?,?) '''

数据库托管在 Azure SQL 数据库上。 这是我用来创建表格的代码:

sql_create_table = """CREATE TABLE XXXX.dbo.logs 
                            (
                                id INT IDENTITY(1,1) NOT NULL,
                                name VARCHAR(100) NOT NULL,
                                ip VARCHAR(20) NOT NULL,
                                page VARCHAR(150)  NOT NULL,
                                socket VARCHAR(200) NOT NULL,
                                date VARCHAR(30) NOT NULL
                            ); """

为什么会这样?

【问题讨论】:

  • 您的 CREATE TABLE 指定了一个由 3 部分组成的名称,Azure SQL 数据库不支持该名称。您实际插入的日志表似乎具有不同的架构,id 列上没有 IDENTITY 属性。
  • 我必须创建 3 部分名称表,否则它会要求我提供 SCHEMA 名称。
  • 什么是“它”?你是如何运行脚本的?
  • 如果它是 Azure SQL 数据库,您可能应该只使用两部分命名并在连接字符串中指定数据库名称。考虑到您在一个语句中使用 1 个部分,而在另一个语句中使用 3 个部分,您与 2 个不同的数据库进行通信也就不足为奇了。
  • @DanGuzman 我使用 pyodbc 连接到错误中的数据库。你能告诉我这个连接应该是什么样子吗?

标签: python sql-server tsql azure-sql-database pyodbc


【解决方案1】:

尝试在“Identity...”之后和“NOT NULL”之前添加“PRIMARY KEY”

【讨论】:

  • 我不希望主键约束影响标识值。它只会防止重复。
猜你喜欢
  • 2021-04-25
  • 2011-01-31
  • 1970-01-01
  • 2015-07-05
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 2018-01-01
相关资源
最近更新 更多