如何在python 3.5中使用to_date处理无效令牌错误?

问题描述:

我知道python 3.x不会接受01,02等值。那么,如何处理这个问题,特别是在使用To_date()进行SQL查询时。如何在python 3.5中使用to_date处理无效令牌错误?

下面是我的查询

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 

数据库 - 甲骨文
图书馆使用 - cx_Oracle

+0

它的oracle数据库使用cx_Oracle库 –

+1

“select * from COREDEP where PDATE”= To_Date('01 -Feb-2016 00:00','DD-MON-YYYY hh24:mi')“试图替换' - >“ –

+0

”select * from COREDEP where PDATE> = To_Date('01 -Feb-2016 00:00','DD-MON-YYYY hh24:mi')“尝试替换' - >” –

'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')" 
^                      ^

至于Pythton而言,它是一个字符串。

这些报价是由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作为Not A String来处理。这就是为什么Python可以在字符串中看到01

+0

这工作! 如果你能解释它与单引号和双引号有什么不同,这将是有帮助的吗?理想情况下,两者应该相同以表示字符串,对吗? –