Python 2.7では、フィーチャのIDをキーに辞書を置きましょう。
何千もの機能があります。
それぞれの機能が単一の値を有するが、この値は機能の6つのパラメータタプルであり、Iは、これらのデータベースにPostgreSQLのテーブルを持っている一方フィーチャのユニークな値としてパラメータを含むタプルをpostgresqlテーブルに書き込む
(例えばサイズ、色、等)機能のパラメータを保存する必要があります。
機能IDは既にテーブルに設定されています(これらの機能に関するその他の情報も)。
IDは一意です(ランダム(シリアルではありませんが、一意の番号)です)。
"param1"、 "param2"、 "param3"、...、 "param6"という名前の6つの空の列があります。
私はすでにこれらの名前を含むタプルを持っている:
columns = ("param1", "param2", "param3", ..., "param6")
私は機能ごとに、それぞれの列にこれらのパラメータを保存するために動作しません持っているコード:
# "view" is the dictionary with features's ID as keys()
# and their 6 params stored in values().
values = [view[i] for i in view.keys()]
columns = ("param1","param2","param3","param4","param5","param6")
conn = psycopg2.connect("dbname=mydb user=username password=password")
curs = conn.cursor()
curs.execute("DROP TABLE IF EXISTS mytable;")
curs.execute("CREATE TABLE IF NOT EXISTS mytable (LIKE originaltable including defaults including constraints including indexes);")
curs.execute("INSERT INTO mytable SELECT * from originaltable;")
insertstatmnt = 'INSERT INTO mytable (%s) values %s'
alterstatement = ('ALTER TABLE mytable '+
'ADD COLUMN param1 text,'+
'ADD COLUMN param2 text,'+
'ADD COLUMN param3 real,'+
'ADD COLUMN param4 text,'+
'ADD COLUMN param5 text,'+
'ADD COLUMN param6 text;'
)
curs.execute(alterstatement) # It's working up to this point.
curs.execute(insertstatmnt, (psycopg2.extensions.AsIs(','.join(columns)), tuple(values))) # The problem seems to be here.
conn.commit() # Making change to DB !
curs.close()
conn.close()
ここで私が持っているエラーだが:
curs.execute(insert_statement, (psycopg2.extensions.AsIs(','.join(columns)), tuple(values)))
ProgrammingError: INSERT has more expressions than target columns
私は何かを欠場する必要があります。
これを正しく行うにはどうすればよいですか?
'print(tuple(values))'何が表示されますか? –
何百MBもの...!簡単に言うと、 'values'は最初は各フィーチャに対して6つのパラメータの6つの値を含むリストです。 6値のプロフィーチャ(数千のフィーチャ)は、リスト内の1つのタプルとして格納されます。タプルの6つの要素のそれぞれは、数字であるものを除いて文字列です。例えば。 :type(values [5617] [type](value [5617] [value] [5617] [value]])は、 5]) ' - >' str'を使用します。他の場所でも 'NoneType'があるかもしれません。 –