【发布时间】:2015-10-20 23:28:09
【问题描述】:
我编写了一个 python 脚本来使用 create table if not exists 语句创建一个表,然后将数据帧中的行插入到 vertica 数据库中。当我第一次运行这个 python 脚本时,我希望它创建一个表并插入数据——它工作正常。
但是从下一次开始,我希望它仅在它不存在时创建一个表(工作正常),并且仅当该行不包含在数据库中时才插入数据。
我同时使用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 代码。我们不会为您编写代码。
-
不清楚你在问什么。具体来说,您想弄清楚如何在 Python 中做什么?
COPY?或者INSERT仅当目标中不存在该行的数据时?还是两者兼而有之? -
我正在寻找两者,仅当目标中不存在该行的数据时复制或插入。正如@kermit 所问,我将包含我正在寻找的代码
-
“如果数据已经存在,我应该执行什么检查以确保不会插入数据?” 加载到临时表并使用
NOT EXISTS或@987654328 @ -
当然。我的费率是 130 美元/小时。
标签: python pandas insert vertica