如何处理python 3.5中截至日期的无效令牌错误?
我知道Python3.x不会接受01、02等值,。因此,如何处理这个问题,尤其是在使用如何处理python 3.5中截至日期的无效令牌错误?,python,oracle,python-3.x,cx-oracle,Python,Oracle,Python 3.x,Cx Oracle,我知道Python3.x不会接受01、02等值,。因此,如何处理这个问题,尤其是在使用to_date()进行SQL查询时 下面是我的问题 cur.execute('select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00', 'DD-MON-YYYY hh24:mi')') 我得到下面的错误 File "<ipython-input-34-c9e7408a33cb>", line 2 cur.execute
to_date()
进行SQL查询时
下面是我的问题
cur.execute('select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00', 'DD-MON-YYYY hh24:mi')')
我得到下面的错误
File "<ipython-input-34-c9e7408a33cb>", line 2
cur.execute('select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00', 'DD-MON-YYYY hh24:mi')')
SyntaxError: invalid token
文件“”,第2行
当前执行('select*from COREDEP where PDATE>=截止日期('2016年2月1日00:00','DD-MON-YYYY hh24:mi'))
SyntaxError:无效令牌
数据库-Oracle使用的库-cx_Oracle'01-Feb-2016 00:00'是一个字符串,Python不应该关心它包含什么。更重要的是,它是更大字符串的一部分,因此Python甚至不应该看到它 我认为问题在于编写SQL语句的方式:对整个字符串和嵌入的文本使用了相同的引号。请尝试改用双引号:
"select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00', 'DD-MON-YYYY hh24:mi')"
“单引号和双引号有什么区别?”
这些引号由Python处理:
"select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00','DD-MON-YYYY hh24:mi')"
^ ^
就皮顿而言,这是一根弦
这些报价由Oracle处理:
"select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00','DD-MON-YYYY hh24:mi')"
^ ^ ^ ^
它们允许Oracle数据库区分语句中的文字
“理想情况下,两者应该相同以表示字符串,对吗?”
在一定程度上。从Python编译器的角度来看您的原始版本:
'select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00','DD-MON-YYYY hh24:mi')'
^ ^
start of string end of string
引号是成对的。因此,匹配引号之后的任何内容都被Python处理为非字符串。这就是为什么Python可以在字符串中看到
01
。这是一个使用cx_oracle库连接的oracle数据库“从COREDEP中选择*其中PDATE>=到日期('01-Feb-2016 00:00','DD-MON-yyyyyyyh24:mi')”尝试替换“-->”“从COREDEP中选择*其中PDATE>=到日期('01-Feb-2016 00:00','DD MON yyyyyyyyyh24:mi')”尝试替换“->”@朗丁:谢谢,成功了!这成功了!!如果你能解释一下单引号和双引号有什么不同,这将是很有帮助的?理想情况下,两者应该相同以表示字符串,对吗?