有人可以向我解释一下吗:
import sqlite3
db = sqlite3.connect(':memory:')
db.execute('create table t1 (id integer primary key, val text)')
db.execute('create table t2 (id integer primary key, val text)')
c = db.cursor()
c.execute('insert into t1 values (?, ?)', (1, 'a'))
c.execute('insert into t2 values (?, ?)', (1, 'b'))
c.execute('insert into t1 values (?, ?)', (2, 'c'))
c.execute('insert into t2 values (?, ?)', (2, 'd'))
c.execute('''select t1.id, t1.val, t2.val
from t1
left join t2 using (id)
where t1.id is not null
union all
select t2.id, t1.val, t2.val
from t2
left join t1 using (id)
where t2.id is not null
and t1.id is null
''')
for row in c:
print(row[0])
if row[0] == 1:
c2 = db.cursor()
c2.execute('delete from t1 where id = ?', (row[0],))
如果我注释掉最后三行,输出为:
1
2
但是,如果我取消最后三行的注释,则输出为:
1
2
1
IE。第一个游标已用第二个游标中执行的DML结果进行了更新。
这是预期的行为吗?有什么方法可以预防吗?
我正在运行Python 3.6.3(根据Ubuntu 17.10),以防万一。
如果可能,SQLite会根据需要计算结果行。但这并非总是可能的,因此无法保证。
您永远不要修改当前在另一个查询中读取的任何表。(数据库可能以不明显的方式扫描表,因此即使更改其他行也可能会更改枚举。)
如果打算进行此类修改,则必须在进行更改之前先读取所有行,例如for row in c.fetchall()
。或者,分步骤阅读表,然后重新搜索最后一个查询离开的地方,即:
SELECT ... FROM MyTable WHERE ID > :LastID ORDER BY ID LIMIT 1;
问题内容: 在中,我可以执行以下操作: 我没有打扰一下,这是否是任何SQL标准或不的一部分,我肯定还有其他的方法来做到这一点,但它是 令人叹为观止的 有用。 这是我的问题。我需要使用SQLITE3 在SQL中 执行类似 的操作 (即,不是宿主语言)。能做到吗 问题答案: 这适用于sqlite:
问题内容: 我将从显示代码开始: 什么是SQLite3代码,将可乐行的价格列的值更改为12。 所以我希望输出为可乐12 sprite 9。 谢谢大家! 问题答案: 这些可能只是转录错误或错别字,但您应该从语句中删除单词,并且在列名周围不需要单引号,因此该语句应类似于:
问题内容: 我正在使用SQLite数据库,并且经常遇到无法找到源的运行时错误。查询后,我通常指向检索到的第一条记录,这有时会触发异常。添加到此异常之外的是以下语句:“光标窗口分配2048kb失败。#open Cursors = 736(#cursors由此proc = 736打开)”。 在Android文档中,我尚未找到与此异常相关的任何信息。有谁知道它的原因和避免它的方法? 问题答案: 此错误几
我目前正在使用webstorm作为我的IDE选择,并且正在尝试安装更好的SQLite3,但是每次尝试安装时都会收到以下错误消息: 更新:我已经在故障排除页面上完成了所有操作,这是我得到的错误消息: 我已经安装了VSCode,“缺少任何VC++工具集”似乎是问题的症结所在
刚刚开始使用pyplay(python 2.7,win7,i3),并在这里查看教程:http://www.pygame.org/docs/tut/intro/intro.html 当我运行代码示例时: ...从空闲或powershell,只有当鼠标在游戏窗口上移动时,游戏窗口才会更新。我原以为球只会自己弹来弹去。这种鼠标位置相关的性能是不是因为pygame/SDL处理图形模式的方式?它与硬件有关吗