首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只将唯一记录导入PostgreSQL

只将唯一记录导入PostgreSQL
EN

Stack Overflow用户
提问于 2016-11-02 16:09:59
回答 1查看 3.7K关注 0票数 3

我正在尝试使用Python将CSV文件导入PostgreSQL。我想告诉Python只导入CSV文件中的记录/行数据,这些记录/行不包含重复项(只有第一个惟一的构建器记录)。我已经附加了用于查找CSV文件中的副本的代码。我刚开始编程,所以请原谅我缺乏经验。

代码语言:javascript
复制
import csv
import psycopg2

database = psycopg2.connect (database = "***", user="***")

cursor = database.cursor()
delete = """Drop table if exists "Real".Noduplicates"""
print (delete)

mydata = cursor.execute(delete)

cursor.execute("""Create Table "Real".Noduplicates
            (UserName varchar(55),
            LastUpdate timestamp,
            Week date,
            Builder varchar(55),
            Traffic integer
            );""")

print "Table created successfully"

csv_data = csv.reader(file('SampleData2.csv'))

already_seen = set()

next(csv_data)

for row in csv_data:
    builder = row[3]
    if builder in already_seen:
        print('{} is a duplicate builder'.format(builder))
    else:
        print('{} is a new builder'.format(builder))
        already_seen.add(builder)

for row in csv_data:

    cursor.execute("""INSERT INTO "Real".Noduplicates (UserName, LastUpdate, Week, Builder, Traffic)"""\
                    """VALUES (%s,%s,%s,%s,%s)""",
           row)

cursor.close()
database.commit()
database.close()

print "CSV Imported"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-02 16:15:31

相反,使用(快得多)将所有行导入临时表,然后使用SELECT DISTINCT ...SELECT DISTINCT ON (builder)或使用聚合函数将一个不同的集合导入目标表。查找dupes是任何RDBMS的强项。

相关代码示例:

,在逐个插入行时,只需在Postgres 9.5中使用新的并在所有5列上添加UNIQUE索引:

但是请注意NULL值的特殊角色(在SQL中从未被认为是相等的):

如果您只需要使用列builder来识别dupes,只需定义该列UNIQUE即可。

代码语言:javascript
复制
...
builder varchar(55) UNIQUE NOT NULL,
...

并使用简单的UPSERT:

代码语言:javascript
复制
INSERT INTO "Real".noduplicates (userName, lastUpdate, week, builder, Traffic)
VALUES (%s,%s,%s,%s,%s)
ON CONFLICT ON (builder) DO NOTHING;

最好不要在Postgres中使用CaMelCase名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40384607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档