http://en.wikipedia.org/wiki/Upsert
在SQLite中有没有一些我没想到的聪明方法?
基本上,如果记录存在,我想更新四列中的三列,如果它不存在,我想用第四列的默认(NUL)值插入记录.
ID是主键,因此UPSERT只会有一条记录.
(我试图避免SELECT的开销,以确定我是否需要更新或插入显然)
建议?
我无法在SQLite网站上确认SQL CREATE的语法.我还没有构建一个演示来测试它,但它似乎不支持..
如果是,我有三列,所以它实际上看起来像:
CREATE TABLE table1(
id INTEGER PRIMARY KEY ON CONFLICT REPLACE,
Blob1 BLOB ON CONFLICT REPLACE,
Blob2 BLOB ON CONFLICT REPLACE,
Blob3 BLOB
);
Run Code Online (Sandbox Code Playgroud)
但是前两个blob不会引起冲突,只有ID会因此我asusme Blob1和Blob2不会被替换(根据需要)
绑定数据时SQLite中的UPDATE是一个完整的事务,这意味着每个要更新的发送行都需要:Prepare/Bind/Step/Finalize语句,与允许使用重置函数的INSERT不同
语句对象的生命周期如下:
更新我猜测与INSERT相比速度慢,但它与使用主键的SELECT相比如何呢?
也许我应该使用select来读取第4列(Blob3),然后使用REPLACE编写一条新记录,将原始的第4列与前3列的新数据混合在一起?
SQLITE
我有两个表"Source"和"Destination"具有相同的字段.ID和COUNTRY虽然它们都有其他不常见的字段.
我需要将Source.Country值复制到Destination.Country,其中连接是ID
对于我的生活,我不能让Sqlite这样做.
在SQL Server等中,这是一个非常简单的任务.
想法?
我想更新一行,如果它存在于表中,否则在单个查询中将其插入SQLite中.从SQLite文档中我发现我们可以使用REPLACE命令来实现这一目标.
REPLACE如果有两个或更多条件,我想知道如何使用:
示例:
如果我有TABLE1包含以下记录的表:
Name Type InitialValue FinalValue
A 1 20 40
B 2 23 50
A 3 40 60
C 3 54 70
Run Code Online (Sandbox Code Playgroud)
这里的组合Name和Type将是独一无二的.
我想设置initialvalue = 50并finalvalue = 90 在那里name = A和Type = 3 如果它存在,否则将其插入.
我正在使用此命令,但它给出了此错误:
REPLACE INTO table1(Name,Type,InitialValue,FinalValue)VALUES('A',3,50,90)WHERE Name ='A'AND Type = 3;
错误是:
"WHERE"附近:语法错误无法执行语句
我怎样才能实现目标?请帮忙.
我想定期(例如每小时)抓取一些特定的网页。我想用python做。抓取的结果应插入到SQLite表中。新信息将被删除,但是“旧”信息将再次被删除,因为python脚本将每小时运行一次。
更准确地说,我想抓取一个体育比赛结果页面,随着比赛的进行,越来越多的比赛结果发布在同一页面上。因此,对于每个新的抓取,我只需要将新结果输入到SQLite表中,因为较早的结果已经在一小时(甚至更早)之前就被抓取了(并插入到表中)。
当第二次被抓取时,我也不想插入相同的结果两次。因此,应该有某种机制来检查是否已刮取一个结果。可以在SQL级别完成吗?因此,我刮了整个页面,INSERT为每个结果创建一个语句,但是只有那些INSERT成功执行的语句才在数据库中不存在。我在想类似UNIQUE关键字之类的东西。
还是我对性能的考虑太多了,应该在DROP TABLE每次开始抓取然后再次从头开始抓取所有内容之前,通过每次操作来解决此问题?我不会谈论太多数据。一年大约有100场比赛的记录(=比赛)。
基本上,我只会对某种最佳实践方法感兴趣。
我正在使用PhoneGap构建库存应用程序.我有一个模块库存用于库存管理.
股票表查询
CREATE TABLE STOCK (
sto_id INTEGER PRIMARY KEY AUTOINCREMENT,
pro_id INTEGER FOREIGNKEY REFERENCES PRODUCT(pro_id) UNIQUE,
quantity TEXT
)
Run Code Online (Sandbox Code Playgroud)
INSERT或REPLACE查询
INSERT OR REPLACE INTO STOCK (pro_id,quantity) VALUES ("1","5");
Run Code Online (Sandbox Code Playgroud)
这个查询没有一个问题,它的工作完美,但我想用新的更新OLD VALUES的SUM.
例:
pro_id quantity
1 5
Run Code Online (Sandbox Code Playgroud)
这是现有的记录,所以现在我将查询新的交易,然后有3个数量 quantity should be (5 (old) + 3 (new) ) = 8.
所以在更新记录后它看起来像.
pro_id quantity
1 8
Run Code Online (Sandbox Code Playgroud)
我怎么能解决这个问题呢.或者让我知道我是否走错路.谢谢.
我正在寻找一些关于如何使用sqlite3在Python中执行此操作的帮助
基本上我有一个下载DB(temp)然后需要将它的记录插入第二个相同的DB(主数据库)的进程..同时忽略/绕过任何可能的重复键错误
我在考虑两个场景,但我不确定如何在Python中做到这一点
选项1:
从DB 1中选择,例如:
dbcur.executemany('SELECT * from table1')
rows = dbcur.fetchall()
Run Code Online (Sandbox Code Playgroud)将它们插入DB 2:
dbcur.execute('INSERT INTO table1 VALUES (:column1, :column2)', rows)
dbcon.commit()
Run Code Online (Sandbox Code Playgroud)这当然不起作用,因为我不确定如何正确地做到:)
选项2(我更喜欢,但不知道该怎么做):
另外,我在DB中有4个表,每个表都有不同的列,我可以跳过命名INSERT语句中的列吗?
就重复键而言,我已阅读过我可以使用'ON DUPLICATE KEY'来处理例如.
INSERT INTO table1 VALUES (:column1, :column2) ON DUPLICATE KEY UPDATE set column1=column1
Run Code Online (Sandbox Code Playgroud) 在我的表中,id是主键,但此代码在sqlite3中不起作用:
insert into text (id,text) VALUES(150574,'Hello') ON DUPLICATE KEY UPDATE 'text' = 'good'
Run Code Online (Sandbox Code Playgroud)
请帮我.
嘿伙计们,我已经搜索了许多其他答案,我仍然无法弄清楚这个问题.
statement.executeUpdate("CREATE TABLE IF NOT EXISTS recentlyWatched (fileName STRING NOT NULL, fileLocation STRING, viewCount INTEGER, PRIMARY KEY (fileName))");
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:media.db");
statement = connection.createStatement();
statement.executeUpdate("INSERT INTO recentlyWatched (fileName, fileLocation, viewCount) VALUES ('"
+ fileName + "', '"
+ fileLocation + "', 0) ON DUPLICATE KEY UPDATE viewCount = '1'");
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多方法来解决这个问题,每当我尝试插入一条记录时都会感到茫然,我得到"java.sql.SQLException:near"ON":语法错误".
更新
最终代码看起来像这样
statement.executeUpdate("INSERT OR IGNORE INTO recentlyWatched (fileName, fileLocation, viewCount) VALUES ('"
+ fileName + "', '"
+ fileLocation + "', 0)");
statement.executeUpdate("UPDATE recentlyWatched SET viewCount = viewCount + …Run Code Online (Sandbox Code Playgroud) sqlite ×7
sql ×5
python ×2
bulk ×1
cordova ×1
duplicates ×1
insert ×1
java ×1
primary-key ×1
upsert ×1
web-scraping ×1