psycopg2.ProgrammingError:“选择”或附近的语法错误

时间:2018-09-03 07:56:57

标签: python psycopg2

我有一个python脚本,该脚本读取sql文件并执行存储在其中的sql命令。但是执行它时出现以下错误:

psycopg2.ProgrammingError: syntax error at or near "select"
LINE 1: select * from image

sql文件的内容为:

  

从图像中选择*

这很简单,应该正确。

抛出错误的代码(更具体地,最后一行):

 cur=conn.cursor()
 string=open(script,'r',encoding='utf-8').read()#script is the sql file
 cur.execute(string)

有没有人可以提供建议?

----更新-----

下面的

是python脚本中的函数。由于发布时间太长,我不发布整个脚本。

def list_(csv, sql=None , script=None , host = None, dbname=None , user=None , pwd=None):
    print(sql)
    print(script)
    if (sql):
        print("sql")
        with conn2db(host,dbname,user,pwd) as conn:
            cur = conn.cursor()
            cur.execute(sql)
    if (script):
        print("script")
        with conn2db(host,dbname, user, pwd) as conn:
            cur = conn.cursor()
            string =  open(script, 'r', encoding='utf-8').read()
            print(string)
            cur.execute(string)
            #cur.execute(open(script, 'r', encoding='utf-8').read())
    with open(csv,'w') as file:
        for record in cur:
            mystr=str(record)[1:-2] if str(record)[-1]==',' else str(record)[1:-1]
            file.write(mystr+'\n')
            #file.write('\n')

2 个答案:

答案 0 :(得分:0)

查看连接字符串以及数据库中的模式和表将有所帮助。请确认这些都是正确的。此外,从文件中读取.strip()或从SQL字符串的末尾添加分号之后,对SQL字符串运行.strip()值得一试。

答案 1 :(得分:0)

今天,我再次遇到此问题,并删除了原始文件,创建了一个新文件,然后键入了sql命令。一切现在都像魅力一样。

我的猜测是原始文件包含一些导致此问题的不可见字符。但是为什么它们在那里存在仍然让我感到困惑。