Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更新记录时缺少右括号(ORA-00907)_Python_Python 3.x_Sql Update_Cx Oracle - Fatal编程技术网

Python 更新记录时缺少右括号(ORA-00907)

Python 更新记录时缺少右括号(ORA-00907),python,python-3.x,sql-update,cx-oracle,Python,Python 3.x,Sql Update,Cx Oracle,我正在努力解决缺少括号的错误。我的部分代码如下: 对于记录中的r: update_query=F“更新{Schema}.{table}集(” 值\u list=list() 对于zip中的c,v(列[1:],val_list[1:]): values_list.append(F“{c}={v}”) 更新_query+=“,”.join(值_列表) 更新_query+=”),其中某些_ID=:1“ cursor.execute(更新查询,r) 从上面的查询如下: UPDATE MY_SHEMA.

我正在努力解决缺少括号的错误。我的部分代码如下:

对于记录中的r:
update_query=F“更新{Schema}.{table}集(”
值\u list=list()
对于zip中的c,v(列[1:],val_list[1:]):
values_list.append(F“{c}={v}”)
更新_query+=“,”.join(值_列表)
更新_query+=”),其中某些_ID=:1“
cursor.execute(更新查询,r)
从上面的查询如下:

UPDATE MY_SHEMA.MY_TABLE SET (VAL2=:2, VAL3=:3, VAL4=:4, VAL5=:5, VAL6=:6, VAL7=:7, VAL8=:8, VAL9=:9, VAL10=:10, VAL11=:11, VAL12=:12, VAL13=:13, VAL14=:14, VAL15=:15, VAL16=:16, VAL17=:17) WHERE VAL1=:1
[11111, 'some_string', 'some longer string', 4, 'another', 1, '', datetime.datetime(2020, 4, 16, 1, 25, 38), 'some-other-string', 'another string', 7.5, 5.5, 'some:complex/string/with/some/:values', 9.8, 8.5, 'another:complex/string/with/some/:values', datetime.datetime(2020, 11, 4, 17, 43, 23)]
记录(r)如下所示:

UPDATE MY_SHEMA.MY_TABLE SET (VAL2=:2, VAL3=:3, VAL4=:4, VAL5=:5, VAL6=:6, VAL7=:7, VAL8=:8, VAL9=:9, VAL10=:10, VAL11=:11, VAL12=:12, VAL13=:13, VAL14=:14, VAL15=:15, VAL16=:16, VAL17=:17) WHERE VAL1=:1
[11111, 'some_string', 'some longer string', 4, 'another', 1, '', datetime.datetime(2020, 4, 16, 1, 25, 38), 'some-other-string', 'another string', 7.5, 5.5, 'some:complex/string/with/some/:values', 9.8, 8.5, 'another:complex/string/with/some/:values', datetime.datetime(2020, 11, 4, 17, 43, 23)]
当我插入类似的值时,效果很好。我根本无法更新我的记录。不知道括号在哪里丢失了。我试图从
SET
WHERE
之间删除
()
。这无助于导致同样的错误。我猜这与记录中的数据类型有关。但是,不知道为什么它在以类似方式插入时工作。哪里
stru列是所有列的列表
值\u字符串的列表类似于[:1,:2,:3…]

SQL='insert into'+Schema+'.+table+'('+str_columns+')值('+value_string+')”
logger.debug('SQL语句:%s',SQL)
cursor.executemany(SQL,value,batcherrors=True)
编辑:我在插入和更新记录时验证了该记录。它们看起来一样,里面有同样的东西,用同样的方式书写


我知道这不是用python进行db操作的最佳方法。这是一个非常旧的脚本,我需要修复更新。我不会从头开始写的。

好吧,基本上括号不是约翰·戈登提到的问题。一旦我删除了它们,就出现了数据不一致的错误。开始挖掘,我得出结论,创建
VALn=:n
的循环有问题。我决定从那里以及从传递给execute方法的记录中删除ID键。我把它保存在一边,并在
WHERE
子句中使用它。循环现在看起来如下所示(添加了val_列表定义):

##########################
#在上面某处#
##########################
对于范围内的i(1,len(列)+1):
val_list.append(':'+str(i))
#######
#(...)#
#######
对于记录中的r:
SOME_ID=r.pop(0)#从记录中删除一些_ID。记录现在变短了
update_query=F“更新{Schema}.{table}SET”
值\u list=list()
对于zip中的c,v(列[1:],val_list[:-1]):#使用不带某些ID的列名和一个较小的:n值(因为recrod现在较短)
values_list.append(F“{c}={v}”)
更新_query+=“,”.join(值_列表)
更新_query+=F“WHERE SOME_ID='{SOME_ID}'”
cursor.execute(更新查询,r)
最后结论:
我想我被所有这些值和事实弄糊涂了,我想通过
:n
从记录本身传递
WHERE
子句参数。也许我可以修复我所拥有的,但陷入困境,决定尝试不同的方法。它可以工作:)

如果您能够看到它试图执行的实际的最终SQL语句,那么问题(希望如此!)将是显而易见的。您可以手动记录语句,还是有SQL调试设置来记录它?@John Gordon我正在记录update\u查询变量和r(传递给execute方法的列表)的内容。不确定oracle cursor是否会记录更多的日志实际上我认为问题要简单得多——根本不应该使用括号!语法应该类似于
updatetablename SET field=:1,其中ID=:2
。在这种情况下,“缺少右括号”错误具有误导性。您确实需要括号将
插入到
,但不需要括号将
更新。。。SET
。就像我在我的原始帖子
中写的那样,我试图从SET和WHERE之间删除()。它没有帮助导致同样的错误。
实际上,我只是再次验证了前面的语句。它确实会在没有
()
的情况下崩溃,但会出现另一个错误。现在它说,数据类型是不一致的。这可能表明execute方法没有以正确的方式解压值。在
update\u查询中
我使用
setval2=:2,VAL3=:3。。。其中VAL1=:1
可能是错误的