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

通过主键将Pandas数据框追加到sqlite表

须曜文
2023-03-14
问题内容

我想将Pandas数据框附加到名为“
NewTable”的sqlite数据库中的现有表上。NewTable具有三个字段(ID,名称,年龄),ID是主键。我的数据库连接:

import sqlite3
DB='<path>'
conn = sqlite3.connect(DB)

我要附加的数据框:

test=pd.DataFrame(columns=['ID','Name','Age'])
test.loc[0,:]='L1','John',17  
test.loc[1,:]='L11','Joe',30

如上所述,ID是NewTable中的主键。键“ L1”已在NewTable中,但键“ L11”不在中。我尝试将数据框追加到NewT​​able。

from pandas.io import sql 
sql.write_frame(test,name='NewTable',con=conn,if_exists='append')

这将引发错误:

IntegrityError: column ID is not unique

该错误很可能是因为键“
L1”已经在NewTable中。数据框中的任何条目均未附加到NewT​​able。但是,我可以毫无问题地将具有新键的数据帧附加到NewT​​able。

是否有一种简单的方法(例如,不循环)将Pandas数据帧附加到sqlite表中,以便将数据帧中的新键附加到表中,而表中已经存在的键不附加?

谢谢。


问题答案:

您可以使用SQL功能 insert or replace

query=''' insert or replace into NewTable (ID,Name,Age) values (?,?,?) '''
conn.executemany(query, test.to_records(index=False))
conn.commit()


 类似资料:
  • 问题内容: 我有一个函数,它返回像这样的字典: 我试图将此字典追加到这样的数据框: 不幸的是,数据框的打印导致空的数据框。有任何想法吗? 问题答案: 您没有将值分配给结果。

  • 问题内容: 这可能很容易,但是我有以下数据: 在数据框1中: 在数据框2中: 我想要一个具有以下形式的数据框: 我尝试使用该方法,但是得到了交叉连接(即笛卡尔积)。 什么是正确的方法? 问题答案: 通常看来,您只是在寻找联接:

  • 我知道pandas的设计目的是加载完全填充的,但我需要创建一个空的DataFrame,然后逐个添加行。做这件事最好的方法是什么? 我成功创建了一个空DataFrame,其中包含: 然后我可以添加一个新行,并用以下内容填充字段: 它可以工作,但看起来很奇怪:-/(它不能添加字符串值) 我如何添加一个新的行到我的数据帧(不同的列类型)?

  • 我使用一个自定义搜索函数的ajax查询,返回超文本标记语言数据成功调用。我想把这个数据附加到已经在页面上初始化的jQuery数据表中。当页面加载jQuery可数据显示,但是当我启动搜索功能,数据被附加到可数据,但不是排序,可搜索形式的可数据用户界面。ajax调用工作和数据返回时,我把成功的调用到console.log. 以下是HTML: 下面是带有Ajax调用的JQuery: }); 这是从aja

  • 问题内容: 我有3个数据框,可以从下面显示的代码中生成 我想做两件事 a) 将所有这三个数据帧追加到一个大数据帧中 当我尝试使用以下代码进行此操作时,输出结果与预期不符 因此,要解决此问题,我了解我们必须重命名导致以下目标b的列名 b) 以一种优雅的方式将这n个数据帧的列重命名为统一的 请注意,在实时情况下,我可能具有预先不知道的具有不同列名的数据框,但它们中的值始终属于列和,并且始终相同。但请注

  • 问题内容: 我正在使用ajax提交包含数组,文本字段和文件的多部分表单。 我将每个VAR附加到主数据中 然后我使用ajax函数将其发送到PHP文件以存储在sql DB中。 但是在PHP方面,变量(即数组)显示为字符串。 当我不使用ajax作为表单数据发送它,而是使用简单的选项时,确实在PHP端将它作为数组获得,但是后来我也无法发送文件。 有什么办法吗? 问题答案: 您有几种选择: 将其转换为JSO