Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的双反斜杠导致sql语法错误_Python_Postgresql - Fatal编程技术网

python中的双反斜杠导致sql语法错误

python中的双反斜杠导致sql语法错误,python,postgresql,Python,Postgresql,我正在使用Python编写连接Postgresql的代码 当我尝试将CSV文件复制到SQL表时,语法是“\copy table\u NAME from PATH\u OF_file delimiter”,“CSV头 “\”在我执行sql查询时出错。 因为它将变成“\\copy” 我有没有办法摆脱这个“\\” def copy_file(file_name, table, path): copy_csv = '\copy ' + table +''' from '''+ "'" + p

我正在使用Python编写连接Postgresql的代码

当我尝试将CSV文件复制到SQL表时,语法是“\copy table\u NAME from PATH\u OF_file delimiter”,“CSV头

“\”在我执行sql查询时出错。 因为它将变成“\\copy”

我有没有办法摆脱这个“\\”

def copy_file(file_name, table, path):

    copy_csv = '\copy ' + table +''' from '''+  "'" + path + "/" + file_name + "'" + ''' delimiter ',' csv header;'''
    try:
        cursor = connection.cursor()
        cursor.execute(copy_csv)
        connection.commit()
        answer = "Data successfully loaded in PostgreSQL"
    except (Exception, psycopg2.DatabaseError) as error :
        answer = "Error while Inserting Data into PostgreSQL table: " + str(error)
    return answer
我希望输出是
\copy table from path…
,,
但是实际输出是
\\copy table from path…

为什么在开始时需要
\
?试试这个:

import os


def copy_file(file_name, table, path):
    try:
        cursor = connection.cursor()
        cursor.execute(
            f"copy {table} from %(filepath}s delimiter ',' csv header",
            {"filepath": os.path.join(path, file_name)}
        )
        connection.commit()
        answer = "Data successfully loaded in PostgreSQL"
    except (Exception, psycopg2.DatabaseError) as error :
        answer = "Error while Inserting Data into PostgreSQL table: " + str(error)
    return answer
它使用:

  • 构建字符串的f-Strings(这是自python3.6以来的支持)
  • 要连接路径名和文件名的操作系统模块
  • 查询中的命名参数
编辑:

与其使用f字符串,不如使用更节省的字符串


为什么一开始就需要
\
?试试这个:

import os


def copy_file(file_name, table, path):
    try:
        cursor = connection.cursor()
        cursor.execute(
            f"copy {table} from %(filepath}s delimiter ',' csv header",
            {"filepath": os.path.join(path, file_name)}
        )
        connection.commit()
        answer = "Data successfully loaded in PostgreSQL"
    except (Exception, psycopg2.DatabaseError) as error :
        answer = "Error while Inserting Data into PostgreSQL table: " + str(error)
    return answer
它使用:

  • 构建字符串的f-Strings(这是自python3.6以来的支持)
  • 要连接路径名和文件名的操作系统模块
  • 查询中的命名参数
编辑:

与其使用f字符串,不如使用更节省的字符串


确切的实际误差是多少?你得到误差了吗?您可以使用前缀
r
(raw)来创建
r“\copy”
,通常Python会以转义形式显示(而不是打印)反斜杠作为双反斜杠。“将数据插入PostgreSQL表时出错:在“\\”处或附近出现语法错误”\第1行:\\copy table from\'/home/file.csv\'…\n^\n'我知道它显示转义形式,但我发现的唯一错误是\\\\反斜杠问题,我手动尝试了它。它在没有双\\\\n的情况下工作。实际的准确误差是多少?您得到误差了吗?您可以使用前缀
r
(raw)来创建
r“\copy”
,通常Python会以转义形式显示(而不是打印)反斜杠作为双反斜杠。“将数据插入PostgreSQL表时出错:在“\\”处或附近出现语法错误”\第1行:\\copy table from\'/home/file.csv\'…\n^\n'我知道它显示转义形式,但我发现的唯一错误是\\\\反斜杠问题,我手动尝试了它。它在没有双\\\\的情况下工作,因为我使用的是大学提供的集群。如果我只使用copy,那么错误将是必须是超级用户才能复制到文件或从文件中复制\n提示:任何人都可以复制到stdout或stdin。psql的\\copy命令也适用于任何人。\n感谢您提供的信息,代码的逻辑非常清楚。但问题并没有解决将数据插入PostgreSQL表时出现的错误:必须是超级用户才能复制到文件或从文件中复制\n提示:任何人都可以复制到标准输出或标准输入。psql的\\copy命令也适用于任何人。\n这就是为什么我使用\\copy我试图使用copy_from,当我打开文件并且sep=',一列值包含逗号,因此它以额外的列结束。然后我尝试另一种方法,因为我使用的是大学提供的集群。如果我只使用copy,那么错误将是必须是超级用户才能复制到文件或从文件中复制\n提示:任何人都可以复制到stdout或stdin。psql的\\copy命令也适用于任何人。\n感谢您提供的信息,代码的逻辑非常清楚。但问题并没有解决将数据插入PostgreSQL表时出现的错误:必须是超级用户才能复制到文件或从文件中复制\n提示:任何人都可以复制到标准输出或标准输入。psql的\\copy命令也适用于任何人。\n这就是为什么我使用\\copy我试图使用copy_from,当我打开文件并且sep=',一列值包含逗号,因此它以额外的列结束。然后我尝试另一种方法