如何在copy_from函数中指定postgres schema?

问题描述 投票:0回答:2

我正在尝试使用 psycopy2 中的 copy_from 函数将数据插入到名为“ST_DAY_SRS”的表中,但是如何指定名为“NEW_CNYB”的模式?我使用了选项的参数,但它不起作用,请帮助我,非常感谢。

def action():
    conn = psycopg2.connect(host='****',port='45432',
                user='postgres',password='postgres',database='NEW_CNYB',options='-c search_path="NEW_CNYB"')

    df = pd.DataFrame(l, columns=['ID', 'DATE', 'SUNRISE', 'SUNSET'])
    ret=''
    values_list=[]

    for i in df.itertuples():
        values_list.append('\t'.join([i[1],i[2],i[3],i[4]]))
    for value in values_list:
        ret += value + '\n'
    print(ret)
    cur = conn.cursor()
    cur.copy_from(file=io.StringIO(ret),table="ST_DAY_SRS",
                 columns=("ID", "DATE", "SUNRISE", "SUNSET"))
    conn.commit()
python postgresql schema psycopg2
2个回答
0
投票

您需要使用

copy_expert()
而不是
copy_from()

示例有一个名为

file
的 CSV 文件:

sql = "COPY SCHEMA.MY_TABLE (COLUMN_A, COLUMN_B) FROM STDIN WITH (FORMAT csv, DELIMITER E'\\t')"

database_cursor.copy_expert(sql, file)

-1
投票

我的方法是在表名之前插入 schema_name ,如下所示

   # schema_name.table_name 
    cur.copy_from(file=io.StringIO(ret),table="ST_DAY_SRS",
                     columns=("ID", "DATE", "SUNRISE", "SUNSET"))

如果这不起作用,还有另一种可能性:

  1. 为所有查询设置架构。 查看此链接上的重播
  2. 创建属于模式的角色/用户,而不是使用插入。

祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.