psycopg2复制python3中的问题

nimxete2  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(367)

我对python(和代码)还比较陌生,尝试使用copyïu from时,我已经吃不消了。
我从csv中读取行,对它们进行一点操作,然后将它们写入sql。使用普通的insert命令需要很长的时间,需要数十万行,所以我想使用copy\u from。不过,它确实可以与insert一起使用。
https://www.psycopg.org/docs/cursor.html#cursor.copy_from 本例使用制表符作为列分隔符,并在每行末尾使用换行符,因此我相应地创建了每一个io行:

43620929    2018-04-11 11:38:14 30263506    30263503    30262500    0   0   0   0   0   1000    1000    0

以下是第一个print语句的输出:

def copyFromIO(thisOutput):
    print(thisOutput.getvalue())
    cursor.copy_from(thisOutput, 'hands_new')

    thisCommand = 'SELECT * FROM hands_new'
    cursor.execute(thisCommand)
    print(cursor.fetchall())

new是一个现有的空sql表。第二个print语句只是[],所以它没有写入db。我做错什么了?
显然,如果它工作,我可以使这个输出更长,有很多行,而不是只有一行。

dohp0rv5

dohp0rv51#

我想我知道了,所以如果将来有人因为某种原因遇到这个问题:
“thisoutput”格式错误,我用较小的片段构建它,包括添加“\t”等。如果我这样做,它会工作: copyFromIO(io.StringIO('43620929\t2018-04-11 11:38:14\t30263506\t30263503\t30262500\t0\t0\t0\t0\t0\t1000\t1000\t0\n')) &我需要copy\u from命令中的正确列:

def copyFromIO(thisOutput):
    print(thisOutput.getvalue())
    thisCol = ('pkey', 'created', 'gameid', 'tableid', 'playerid', 'bet', 'pot',
               'isout', 'outround', 'rake', 'endstack', 'startstack', 'stppaid')

    cursor.copy_from(thisOutput, 'hands_new', columns=(thisCol))
    thisCommand = 'SELECT * FROM hands_new'
    cursor.execute(thisCommand)
    print(cursor.fetchall())

相关问题