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

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

psycopg2 將行作為列插入

psycopg2 將行作為列插入

揚帆大魚 2023-12-12 14:54:44
我不確定我是否正確地表達了這一點,但是當從一個數據庫查詢數據并將其插入另一個數據庫時psycopg2,在某些時候腳本會分解數據,并將行作為列插入(即每個數據庫打印一個字符)每行列)如下:     name     | id_2       | id_1        | blank        | data--------------+------------+-------------+--------------+-------------- A            | 1          | a           |              | {json: data} B            | a          | 1           |              | {json: data} C            | 2          | b           |              | {json: data} D            | b          | 2           |              | {json: data} E            | 3          | c           |              | {json: data} F            | c          | 3           |              | {json: data}我希望表格如下所示:     name     | id_2       | id_1        | blank        | data--------------+------------+-------------+--------------+-------------- ABCDEF       | 1a2b3c     | a1b2c3      |              | {json: data}我必須生成的代碼是:import psycopg2, uuidid_1 = str(uuid.uuid4())conn1 = psycopg2.connect(    host='host',    database=db1,    user='user',    password='password')conn2 = psycopg2.connect(    host='host',    database=db2    user='user',    password='password')def generate_data(id_1, name, id_2):    data = {        "tag": name,        "id_2": id_2,        "id_1": id_1,        "rand_int": random.randint(0, 86400),        "rand_uni_1": str(round(random.uniform(0.0, 8.0), 2)),        "rand_uni_2": str(round(random.uniform(0.0, 16.0), 2)),        "digi": "",        "point_type": random.randint(0, 1),        "garbage_data": "garbage_data"    }    data_str = str(json.dumps(data).replace("'", "''"))    add_data(name, id_2, id_1, data_str)我使用 print 語句來驗證數據是否顯示為應插入表中。我在隔離與此代碼相關的另一個問題時發現了這一點jsonb,我將在接下來發布該問題。我對 SQL 和 Python(以及 psycopg2)比較陌生,因為我來自 QA,所以非常感謝任何幫助!
查看完整描述

1 回答

?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

今天早上站會后,我聯系了我們的一些開發人員,并解決了這個問題,如果不清楚的話,這就是數據如何輸入數據庫的方式,如上所述。


這里的問題在于線路cur.executemany(insert_data, zip(name_rec, id_2_rec, id_1_rec, data_rec))- 更具體地說是executemany方法和zip()功能。由于該zip()函數返回一個 zip 對象,它是一個元組迭代器,其中每個傳遞的迭代器中的第一項(以及所有后續項)都配對在一起,并且該executemany方法準備數據庫操作(查詢或命令)并針對所有參數執行它在序列 seq_of_params 中找到的序列或映射,這導致數據逐個字符地輸入到新表中。通過將行更改為來解決此問題,cur.execute(insert_data, (name_rec, id_2_rec, id_1_rec, data_rec))現在我的數據按應有的方式顯示,即


     name     | id_2       | id_1        | blank        | data

--------------+------------+-------------+--------------+--------------

 ABCDEF       | 1a2b3c     | a1b2c3      |              | {json:data}

對于混亂的代碼,我深表歉意,如果我最初沒有正確地闡明這個問題——我在音樂學校上學,大約 2.5 年前作為 QA 進入這個領域,沒有任何經驗,所以這對我來說仍然是相對較新的。


查看完整回答
反對 回復 2023-12-12
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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