【发布时间】: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