我已经读了这个插入语句两天了,无法确定哪个额外的值被添加到插入查询中。表中的列数和插入查询中指定的列数是正确的,所以有人可以告诉我哪个正在增加额外的价值
我正在使用带有字典的python脚本来创建create和insert语句.PostgreSQL用于数据库。
python为Create创建的字符串
CREATE TABLE IF NOT EXISTS AiSTestTable(newID text not null constraint AiSTestTable_pkey primary key,aismessagesourceid int,messagechecksum text,offset0 text,utcmonth int,aismessagerepeatind int,utcyear int,latitude2s float,increment0 text,timeout0 text,aismessageid int,positionaccuracy int,latitude int,communicationstate int,utcminute int,positionfixingdevice int,utcday int,messagedatestamp timestamp,spare int,messagerssi
float,utchour int,datafile text,messagefreq float,messagechecksumresult text,messagedecoded text,longitude2s float,longitude int,utcsecond int,messagelength int,transmissioncontrol int,aismessageidtext text,raimflag int,numberofslots0 text); ALTER table AiSTestTable OWNER to postgres;
python为Insert创建的字符串
INSERT INTO aistesttable (newID,aismessagesourceid,messagechecksum,offset0,utcmonth,aismessagerepeatind,longitude,latitude2s,increment0,timeout0,aismessageid,positionaccuracy,latitude,communicationstate,utcminute,positionfixingdevice,utcday,messagedatestamp,spare,messagerssi,utchour,datafile,messagefreq,messagechecksumresult,messagedecoded,longitude2s,utcyear,utcsecond,messagelength,transmissioncontrol,aismessageidtext,numberofslots0,raimflag) VALUES ('1','113669999','59','0000','0','0','5834147','45.72','0000','0000','4','1','27432000','0','60','1','0','2018-07-30 09:13:37 UTC','0000','0','-48.0772018433','24','Broker','161.975344','Fail','yes','9.72357833333','0','60','37','0','Basestation report','0000','0');
这是创建字符串的代码(newID是计数值)
TagString = str(d1.keys()).replace("['","").replace("']","").replace("', '",",")
TagType = str(d2).replace("': ["," ").replace("], '",",").replace("{'","").replace("}","").replace("'","").replace("]","").replace('"','').replace("[","")
newID="'"+str(c)+"'"+","
values=str(d1.values()).replace("[[","").replace("[","").replace("]","").replace(", '",",'")
commands = "CREATE TABLE IF NOT EXISTS AiSTestTable" + "(newID text not null constraint AiSTestTable_pkey primary key,"+TagType+"); ALTER table AiSTestTable OWNER to postgres;"
insert = "INSERT INTO aistesttable (newID,"+TagString+")" + " VALUES " + "("+newID+values+");"
词典中的值
d1={'aismessagesourceid': ['113669999'], 'messagechecksum': ['59'], 'offset0': ['0000'], 'utcmonth': ['0'], 'aismessagerepeatind': ['0'], 'longitude': ['5834147'], 'latitude2s': ['45.72'], 'increment0': ['0000'], 'timeout0': ['0000'], 'aismessageid': ['4'], 'positionaccuracy': ['1'], 'latitude': ['27432000'], 'communicationstate': ['0'], 'utcminute': ['60'], 'positionfixingdevice': ['1'], 'utcday': ['0'], 'messagedatestamp': ['2018-07-30 09:13:37 UTC'], 'spare': ['0000', '0'], 'messagerssi': ['-48.0772018433'], 'utchour': ['24'], 'datafile': ['Broker'], 'messagefreq': ['161.975344'], 'messagechecksumresult': ['Fail'], 'messagedecoded': ['yes'], 'longitude2s': ['9.72357833333'], 'utcyear': ['0'], 'utcsecond': ['60'], 'messagelength': ['37'], 'transmissioncontrol': ['0'], 'aismessageidtext': ['Basestation report'], 'numberofslots0': ['0000'], 'raimflag': ['0']}
d2={'aismessagesourceid': ["'int'"], 'messagechecksum': ['text'], 'offset0': ['text'], 'utcmonth': ["'int'"],
'aismessagerepeatind': ["'int'"], 'utcyear': ["'int'"], 'latitude2s': ["'float'"], 'increment0': ['text'],
'timeout0': ['text'], 'aismessageid': ["'int'"], 'positionaccuracy': ["'int'"], 'latitude': ["'int'"], 'communicationstate': ["'int'"], 'utcminute': ["'int'"], 'positionfixingdevice': ["'int'"], 'utcday': ["'int'"], 'messagedatestamp': ['timestamp'], 'spare': ["'int'"], 'messagerssi': ["'float'"], 'utchour': ["'int'"],
'datafile': ['text'], 'messagefreq': ["'float'"], 'messagechecksumresult': ['text'], 'messagedecoded': ['text'], 'longitude2s': ["'float'"], 'longitude': ["'int'"], 'utcsecond': ["'int'"], 'messagelength': ["'int'"], 'transmissioncontrol': ["'int'"], 'aismessageidtext': ['text'], 'raimflag': ["'int'"], 'numberofslots0': ['text']}
有一个值'spare': ['0000', '0'],
,你尝试通过使用.replace(", '",",'")
连接成一个,它创建最终值'000','0'
,在insert命令中被解释为两个值。
你需要解决这个案子。如果你想要两个数字在一个字符串值,你可以使用.replace(", '" , ",")
,它创建最终值'000,0'
错误在字段'spare'
中,因为内容是一个数组['0000', '0']
。
当您创建插入字符串时,您将添加这些字段。