我写了一个python脚本使用create table if not exists
语句创建一个表,然后插入来自数据帧行到Vertica的数据库。我第一次运行这个python脚本时,我希望它创建一个表并插入数据 - 它工作正常。插入Vertica的,如果表不存在或不是一个重复的行
但是从开始下一次,我希望它创建一个表只有当不存在(正常工作)且仅当该行没有在数据库中包含的数据插入它。
我同时使用insert
声明,COPY
语句来插入数据。如何在Python中做到这一点?我正在使用pyodbc从python访问Vertica数据库。
编辑的帖子,包括一些代码: 有一个名为tableframe_df数据框,从中我需要填充内容到作为波纹管创建一个表:
我在Vertica的创建表创建表如果不存在,则创建一个表,如果没有的话。
cursor.execute("create table if not exists <tablename> (fields in the table)")
COPY statement to write to this table from a csv that was created
`cursor.execute("COPY tablename1 FROM LOCAL 'tablename.csv' DELIMITER ',' exceptions 'exceptions' rejected data 'rejected'")`
##for i,row in tablename_df.iterrows():
cursor.execute("insert into tablename2 values(?,?,?,?,?,?,?,?,?,?,?,?)",row.values[0],row.values[1],row.values[2],row.values[3],row.values[4],row.values[5],row.values[6],row.values[7],row.values[8],row.values[9],row.values[10],row.values[11])
在上面的代码中,我创建表,然后使用COPY和插入插入到tablename1和tablename2中。这在第一次执行时工作正常(因为表中没有数据)。现在,如果我运行同一个脚本两次,那么数据将在这些表中插入两次。 我应该执行什么检查以确保数据在已经存在的情况下不会被插入?
您需要实际显示您需要帮助的Python代码。我们不会为您编写代码。 – Kermit
目前还不清楚你在问什么。特别是你想弄清楚如何在Python中做什么? 'COPY'?或者只有当该行的数据不存在于目标中时才使用INSERT?或两者? – woot
我正在寻找这两个,COPY或插入仅当该行的数据不存在于目标中。正如@kermit所问,我将包含我正在寻找的代码 –