我开始知道python 3.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('select * from COREDEP where PDATE >= To_Date('01-Feb-2016 00:00', 'DD-MON-YYYY hh24:mi')')
SyntaxError: invalid token
数据库 - Oracle
使用的库 - cx_Oracle
答案 0 :(得分:1)
'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处理为非字符串。这就是为什么Python可以在字符串中看到01
。