Postgresql:将2列数据连接到1列中

Postgresql:将2列数据连接到1列中,postgresql,psycopg2,Postgresql,Psycopg2,我正在将数据从一个数据库迁移到另一个数据库(包括postgresql)。我想将源数据库的firstname和lastname列的值连接到目标数据库的name列。当我尝试运行查询时,我得到一个错误:psycopg2.ProgrammingError:子查询返回多行,用作检查中其他线程的表达式。因此,我发现了这个错误。我在代码中添加了LIMIT 1,但它给出了表中现有名称的名字和姓氏 我的代码: cur_t.execute(""" SELECT firstname,

我正在将数据从一个数据库迁移到另一个数据库(包括postgresql)。我想将源数据库的firstname和lastname列的值连接到目标数据库的name列。当我尝试运行查询时,我得到一个错误:psycopg2.ProgrammingError:子查询返回多行,用作检查中其他线程的表达式。因此,我发现了这个错误。我在代码中添加了LIMIT 1,但它给出了表中现有名称的名字和姓氏

我的代码:

cur_t.execute("""
                SELECT firstname, lastname
                FROM authors;
                """)

for row in cur_t:
    cur_p.execute("""
                     INSERT INTO lib_author (
                                                 created, modified, last_name,
                                                 first_name, country,
                                                 school_id, name)
                    VALUES (current_timestamp, current_timestamp, %s, %s, %s,
                            (SELECT id FROM ed_school WHERE name='My Test School'),
                            (SELECT CONCAT(first_name, ',', last_name) AS name FROM lib_author LIMIT 1)
                            )
                    """, (row['lastname'], row['firstname'], ''))

如何从源数据库中调用firstname和lastname列?

类似于选择firstname | | |',| | lastname from authors;?如果你把姓和名连在一起,我的名字会显示为“迈克,谢里尔”。我想你不想那样。我认为您最好构建一个正确的SELECT语句,然后在lib_author SELECT中运行INSERT。好的经验法则:如果您在SQL数据库中逐行处理数据,那么您可能做了错误的事情。@MikeSherrill'CatRecall'迁移数据的最佳方法应该是什么。我正在迁移的数据具有不一致性,而目标数据库具有严格的NOTNULL字段。逐行处理让我对数据有一点控制。@JimJones是的,Jim,类似的。只是我使用了2个连接,cur_t和cur_p是不同的连接。所以我修改了代码,从lib_author LIMIT 1中删除了SELECT CONCATfirst_name','和last_name AS name,并将其替换为%s。在带行值的括号中,我连接了行['firstname'],行['lastname']。它可以保存名字和姓氏,问题是它包含了括号。关于如何删除括号有什么建议吗?