【发布时间】:2020-04-04 01:08:14
【问题描述】:
我将一些查询保存在单个 .sql 脚本中,而不是直接将它们写入 .py 脚本的变量中。
现在我想用 Python 读取这个 sql 脚本,用分号分割每个 sql 语句,然后将每个脚本传递给 Psycopg2 游标以顺序执行。
python 脚本似乎可以正确读取文件,但是当我尝试执行语句时会抛出“无法执行空查询”错误。
也许问题是:这个 sql 脚本中有很多换行符。其中的语句如下所示:
DROP TABLE IF EXISTS
target_schema.some_table
;
SELECT
column
FROM
schema.table
;
这是python代码:
import psycopg2
import pathlib
conn = psycopg2.connect(
user=user
,password=password
,host=host
,port=port
,database=database
)
pg_cursor = conn.cursor()
scriptContents = Path('my_folder\my_sql_script.sql').read_text(encoding='utf-8')
sqlStatements = scriptContents.split(sep=';')
for statement in sqlStatements:
try:
pg_cursor.execute(f'{statement}')
conn.commit()
except psycopg2.Error as errorMsg:
print(errorMsg)
conn.rollback()
谁能帮我解决这个问题?
【问题讨论】:
-
看sqlStatements,最后一个元素会是空字符串
-
正是@IainShelvington。我在打印每条语句时都看到了这个空字符串,但我不知道如何摆脱它。
标签: python sql postgresql psycopg2