使用pymssql连接SQLserver可以查询数据,但无法INSERT、UPDATE等操作

使用pymssql连接SQLserver可以查询数据,但无法INSERT、UPDATE等操作,使用的语句:

{
conn =pymssql.connect(host='localhost', server="****",port="1433",user="sa",password="********",database="test", charset="GBK",autocommit=True)
if conn:
   print('连接数据库成功!')
cursor =conn.cursor()
sql_insert="insert into student values('20230022','cdc','女',66);commit"
try:
    cursor.execute(sql_insert)
except:
    conn.rollback()
conn.commit()
conn.close()
}

代码运行显示连接成功,但数据总是无法写入,其他操作也不行,而之前没有设置autocommit和使用commit、conn.rollback的时候显示以下错误:
连接数据库成功!
Traceback (most recent call last):
File "src\pymssql_pymssql.pyx", line 459, in pymssql._pymssql.Cursor.execute
File "src\pymssql_mssql.pyx", line 1087, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql_mssql.pyx", line 1118, in pymssql._mssql.MSSQLConnection.execute_query
File "src\pymssql_mssql.pyx", line 1251, in pymssql._mssql.MSSQLConnection.format_and_run_query
File "src\pymssql_mssql.pyx", line 1789, in pymssql._mssql.check_cancel_and_raise
File "src\pymssql_mssql.pyx", line 1835, in pymssql._mssql.raise_MSSQLDatabaseException
pymssql._mssql.MSSQLDatabaseException: (547, b'The INSERT statement conflicted with the CHECK constraint "CK__student__DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "d:/python/pyprice/test.py", line 61, in
cursor.execute(sql_insert)
File "src\pymssql_pymssql.pyx", line 478, in pymssql._pymssql.Cursor.execute
pymssql._pymssql.IntegrityError: (547, b'The INSERT statement conflicted with the CHECK constraint "CK__student__DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n')

弄了几天都困在这个步骤,请大家帮忙



感谢,试了一下单引号,显示括号内数据格式出错,运行后显示“SyntaxError: invalid syntax”

提示是The INSERT statement conflicted with the CHECK constraint,约束冲突了。看看约束CK__student__DB-Lib的定义是什么。比如66,有可能是班级ID但班级表里没有ID为66的数据。

另外insert最好把要插入的字段列表也写出来,避免以后修改表结构时对应不上。

这个是你的数据表设计的问题,插入语句的字段存在不符合约束,可以考虑把约束去掉,再进行测试

commit 太多了, 代码修改如下:

conn = pymssql.connect(host='localhost', server="****", port="1433", user="sa", password="********", database="test",
                       charset="GBK", autocommit=False)
if conn:
    print('连接数据库成功!')
cursor = conn.cursor()
sql_insert = "insert into student values('2','a','0',1)"
try:
    cursor.execute(sql_insert)
except:
    conn.rollback()
conn.commit()
conn.close()
双引号改成单引号
sql_insert='insert into student values('20230022','cdc','女',66);commit'

是不是你的用户权限问题啊