当前位置: 首页 > 面试题库 >

直接在Python中重新创建Postgres COPY?

叶允晨
2023-03-14
问题内容

我有一个数据块,当前为n元组列表,但格式相当灵活,我想附加到Postgres表中-在这种情况下,每个n元组都对应于数据库中的一行。

到目前为止,我一直在做的工作是将所有内容都写入CSV文件,然后使用postgres的COPY将所有内容批量加载到数据库中。这可行,但不是最佳选择,我希望能够直接从python进行所有操作。python中是否有一种方法可以在Postgres中复制COPY类型的批量加载?


问题答案:

如果使用的是psycopg2驱动程序,则游标提供了copy_tocopy_from函数,可以从任何类似文件的对象(包括StringIO缓冲区)中读取。

psycopg2源代码分发随附的示例examples
/
copy_from.py

和examples
/
copy_to.py
中有一些示例。

此摘录来自copy_from.py示例:

conn = psycopg2.connect(DSN)
curs = conn.cursor()
curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")

# anything can be used as a file if it has .read() and .readline() methods
data = StringIO.StringIO()
data.write('\n'.join(['Tom\tJenkins\t37',
                  'Madonna\t\N\t45',
                  'Federico\tDi Gregorio\t\N']))
data.seek(0)

curs.copy_from(data, 'test_copy')


 类似资料:
  • 我正在使用JDBC和MySQL。 我可以创建文本字段并将其内容作为记录输入到MySQL表中(然后填充相应的javafx TableView)。 我想知道用户是否可以通过点击TableView单元格直接向TableView添加新记录。 这样做会是一个好的做法吗?TableView显示销售发票的详细信息,如项目名称、销售数量、价格等。

  • 问题内容: 我有一个日志文件,其中使用python记录了一些测试命令及其状态(通过/失败)。现在,我希望测试命令不应写为简单文本,而应写为超链接。这样,当我单击它们时,将打开另一个链接到它们的文件。 例如: 现在,我希望写在logfile.log中的CommandName应该是文件TestCommand.log的超链接,以便当我单击CommandName时,文件TestCommand.log会打开

  • 我试图在JSPlumb中创建两个endpoint之间的直线连接。当我尝试连接到endpoint时,将拖动源点,而不是创建直线连接。 这里是小提琴:http://jsfiddle.net/dutchman71/aMksZ/2/ 谢谢你的帮助。

  • 我有div,可以拖放到绘图区域。可以使用鼠标从源endpoint拖放到目标endpoint手动连接这些div。在这样创建的连接上,连接被分离,但endpoint保留,删除的连接可以通过上述相同的手动过程重新创建。现在,我还将以json格式的连接节点流程图形式的绘图保存到磁盘文件中。在加载文件时,流程图会完美地显示所有连接和节点。现在我在点击一个节点时删除一个连接,它就可以工作了。但是现在我不能再次

  • 问题内容: 有没有一种方法可以在Python中创建NTFS交接点?我知道我可以调用该实用程序,但是最好不要依赖外部工具。 问题答案: 我在类似的问题中回答了这个问题,因此将我的回答复制到下面的内容中。自从写出答案以来,我最终编写了一个纯Python(如果您可以调用仅使用ctypes python的模块)模块来创建,读取和检查可在此文件夹中找到的联结。希望能有所帮助。 另外,与使用 CreateSy

  • 我想打印一个新创建的元素添加到数据库后立即插入。 对于插入,使用 为了打印,我创建了一个路由和一个视图。 此路由正在处理打印请求: 问题是:如何用为新元素生成的ID触发打印的路由? 感谢你的帮助.