如何在sqlite3中添加部分行数据,在python

时间:2018-01-23 00:13:04

标签: python sqlite

我的python代码产生一个条件(例如Up,Down,Left,Right),该条件发生时的开始时间,以及将来某个条件结束时的结束时间。

目前,代码在数据库中生成以下输出。

当前状态

条件| start_time | END_TIME

向上| NULL | NULL

NULL | 44:03.1 | NULL

NULL | NULL | 44:05.2

向下| NULL | NULL

NULL | 44:05.2 | NULL

NULL | NULL | 44:20.4

对| NULL | NULL

NULL | 44:20.4 | NULL

NULL | NULL | 44:21.6

这是我当前用于记录第一个值的条件,即条件方向:

c.execute('INSERT INTO conditionsAndTimesToPlot (condition_direction) VALUES (?)', (condition,))
conn.commit()

在其他一些事情发生之后,start_time将被记录为:

c.execute('INSERT INTO conditionsAndTimesToPlot (start_time) VALUES (?)', (start_time_full,))
        conn.commit()

然后在某个任意时间之后条件结束并且结束时间记录为:

c.execute('INSERT INTO conditionsAndTimesToPlot (end_time) VALUES (?)', (end_time_full,))
                    conn.commit()

我想要实现的目标

条件| start_time | END_TIME

向上| 44:03.1 | 44:05.2

向下| 44:05.2 | 44:20.4

对| 44:20.4 | 44:21.6

我尝试了什么

我尝试使用UPDATE作为时间参数。我认为条件方向的INSERT将插入一个新行,并且开始和结束时间的UPDATE会自然地回填第2和第3列,但现在我在终端中收到此错误:

sqlite3.OperationalError: near "INTO": syntax error

问题

  • 有什么明显的东西让我在这里失踪以实现这一目标吗?
  • 我应该创建3个表(每个值[condition,start_time,end_time]一个,然后编写代码,将三个表一行合并到一个表中,用于循环中的每个循环?

感谢您对我的第一个stackoverflow问题的帮助,

大卫

1 个答案:

答案 0 :(得分:1)

修复UPDATE INTO错误(INTO之后没有UPDATE)并进一步研究文档后,我找到了以下资源: https://www.sqlite.org/lang_update.htmlhttps://www.tutorialspoint.com/sqlite/sqlite_update_query.htm

我的代码现在通过执行以下操作生成我想要实现的表外观。第一部分没有改变,这会创建每一个新行:

c.execute('INSERT INTO conditionsAndTimesToPlot (condition_direction) VALUES (?)', (condition,))
conn.commit()

这产生说左| NULL |空值。然后代替INSERT用于下一列,您可以做的是UPDATE并查找下一列有NULL值的列:

c.execute("UPDATE conditionsAndTimesToPlot SET start_time = (?) WHERE start_time IS NULL", (start_time_full,))
conn.commit()

这产生说左| 44:03.1 |空值。然后在结束时间相同,查找NULL值:

c.execute("UPDATE conditionsAndTimesToPlot SET end_time = (?) WHERE end_time IS NULL", (end_time_full,))
conn.commit()

这产生说左| 44:03.1 | 44:05.2。问题现在已经完全解决了。