String TypeError:在方法参数中设置字符串格式期间,并非所有参数都已转换

String TypeError:在方法参数中设置字符串格式期间,并非所有参数都已转换,string,formatting,psycopg2,python-3.4,String,Formatting,Psycopg2,Python 3.4,对于python专家来说,这可能是一个简单的问题 import psycopg2 import io import sys import pdb import codecs import os def connect_db(db, usr, pw, hst, prt): conn = psycopg2.connect(database=db, user=usr, password=pw, host=hst, port=prt)

对于python专家来说,这可能是一个简单的问题

import psycopg2
import io
import sys
import pdb
import codecs
import os

def connect_db(db, usr, pw, hst, prt):
    conn = psycopg2.connect(database=db, user=usr, password=pw,
                            host=hst, port=prt)
    return conn

def write_table_to_file(table, connection):
    db_table = io.BytesIO()
    cur = connection.cursor()
    cur.copy_to(codecs.StreamRecoder(db_table, codecs.getencoder('utf-8'),
                                     codecs.getdecoder('latin-1'),
                                     codecs.getreader('utf-8'),
                                     codecs.getwriter('utf-8')), table)
    cur.close()
    return db_table

def write_file_to_table(file_object, table, connection):
    cur = connection.cursor()
    print(table)
    cur.execute("DELETE FROM (%s);",(table))
    file_object.seek(0)  # Set the buffer at position 0 before read
    cur.copy_from(file_object, table)
    cur.close()

def main():
    os.chdir(os.path.abspath('C:/testAJFmidrange'))
    f = open('tctmem70.txt', 'r')
    pw = f.readline().strip()
    con_tctmsv64 = connect_db("x", "y",
                              pw,
                              "z", "5432")
    con_tctmsv64_replica = connect_db("x", "y", "z",
                             "a", "5432")
    try:
        table_name = "a" + sys.argv[1] + "002_ajob"
        print(table_name)
        t = write_table_to_file(table_name, con_tctmsv64)
        pdb.set_trace()
        write_file_to_table(t, "a140729002_ajob", con_tctmsv64_replica)
        con_tctmsv64_replica.commit()
    finally:
        con_tctmsv64.close()
        con_tctmsv64_replica.close()

if __name__ == "__main__":
    sys.exit(main())
错误:

C:\testAJFmidrange>python tctmem70.py 140924
a140924002_ajob
> c:\testajfmidrange\tctmem70.py(48)main()
-> write_file_to_table(t, "a140729002_ajob", con_tctmsv64_replica)
(Pdb) c
a140729002_ajob
Traceback (most recent call last):
  File "tctmem70.py", line 55, in <module>
    sys.exit(main())
  File "tctmem70.py", line 48, in main
    write_file_to_table(t, "a140729002_ajob", con_tctmsv64_replica)
  File "tctmem70.py", line 29, in write_file_to_table
    cur.execute("DELETE FROM (%s);",(table))
TypeError: not all arguments converted during string formatting
C:\testAJFmidrange>python tctmem70.py 140924
a140924002_ajob
>c:\testajfmidrange\tctmem70.py(48)main()
->将文件写入表格(t,“a140729002”ajob,con_tctmsv64_副本)
(Pdb)c
a140729002_ajob
回溯(最近一次呼叫最后一次):
文件“tctmem70.py”,第55行,在
sys.exit(main())
文件“tctmem70.py”,第48行,主目录
将文件写入表格(t,“a140729002”ajob,con_tctmsv64_副本)
文件“tctmem70.py”,第29行,在write_File_to_表中
cur.execute(“删除自(%s);”,(表))
TypeError:在字符串格式化过程中并非所有参数都已转换

尝试了几种不同的喂线方式。检查它是否为string类型,但似乎没有任何功能。这很奇怪,因为当我给它输入字符串文字时,它就工作了,就在我尝试通过添加它抱怨的命令行参数来动态计算它的时候。不确定发生了什么事?

事实证明,我应该仔细阅读Python3.4的新格式。我在2.7中编写的代码。下面的代码修复了这个问题

def write_file_to_table(file_object, table, connection):
    cur = connection.cursor()
    cur.execute("DELETE FROM {0};".format(table))
    file_object.seek(0)  # Set the buffer at position 0 before read
    cur.copy_from(file_object, table)
    cur.close()