亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Psycopg2 “無法執行空查詢”

Psycopg2 “無法執行空查詢”

婷婷同學_ 2022-09-27 15:10:50
我將一些查詢保存在單個.sql腳本中,而不是直接將它們寫入.py腳本中的變量中?,F在我想使用Python閱讀這個sql腳本,用分號拆分每個sql語句,然后將每個腳本傳遞給Psycopg2游標進行順序執行。python 腳本似乎正確讀取了文件,但是當我嘗試執行語句時,會引發“無法執行空查詢”錯誤。也許問題是:在這個sql腳本中有許多換行符。其中的語句寫如下:DROP TABLE IF EXISTS    target_schema.some_table;SELECT    columnFROM    schema.table;下面是蟒蛇代碼:import psycopg2import pathlibconn = 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()任何人都可以幫我解決這個問題嗎?
查看完整描述

1 回答

?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

將 sql 文件拆分為 時,創建的列表將以空字符串作為最后一個元素,并且將無法作為有效查詢執行。為了避免這種情況,假設文件中的所有sql最終都有,請嘗試以下操作:;;


for statement in sqlStatements[:-1]:

# it will slice out the last element of your sqlStatements list

    try:

        pg_cursor.execute(f'{statement}')

        conn.commit()

    except psycopg2.Error as errorMsg:

        print(errorMsg)        

        conn.rollback()


另一種解決方案是將語句新行分開,然后按以下方式逐個讀取它們:


my_sql_script.sql:


DROP TABLE IF EXISTS target_schema.some_table

SELECT column FROM schema.table

為了運行這些語句,請使用:


with open('my_folder\my_sql_script.sql','r', encoding='utf-8') as f:

    for statement in f.readlines():    

        try:

            pg_cursor.execute(f'{statement.rstrip()}')

            conn.commit()

        except psycopg2.Error as errorMsg:

            print(errorMsg)        

            conn.rollback()


查看完整回答
反對 回復 2022-09-27
  • 1 回答
  • 0 關注
  • 71 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號