如何在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
答
'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
这工作! 如果你能解释它与单引号和双引号有什么不同,这将是有帮助的吗?理想情况下,两者应该相同以表示字符串,对吗? –
它的oracle数据库使用cx_Oracle库 –
“select * from COREDEP where PDATE”= To_Date('01 -Feb-2016 00:00','DD-MON-YYYY hh24:mi')“试图替换' - >“ –
”select * from COREDEP where PDATE> = To_Date('01 -Feb-2016 00:00','DD-MON-YYYY hh24:mi')“尝试替换' - >” –