SQLite create pre-populated FTS table
I'm not sure if you can do it in one statement, but you can do it in two... after your CREATE VIRTUAL TABLE
statement, you can do: INSERT INTO bar SELECT * FROM other_table
Do SQLite FTS tables need to be manually populated?
After further reading I found that the FTS table indeed need to be manually kept in sync with the content table. When running the CREATE VIRTUAL TABLE
call, the FTS table is automatically populated but after that deletions, insertions and updates have to be done manually.
In my case I've done it using the following triggers:
CREATE VIRTUAL TABLE notes_fts USING fts4(content="notes", notindexed="id", id, title, body
CREATE TRIGGER notes_fts_before_update BEFORE UPDATE ON notes BEGIN
DELETE FROM notes_fts WHERE docid=old.rowid;
END
CREATE TRIGGER notes_fts_before_delete BEFORE DELETE ON notes BEGIN
DELETE FROM notes_fts WHERE docid=old.rowid;
END
CREATE TRIGGER notes_after_update AFTER UPDATE ON notes BEGIN
INSERT INTO notes_fts(docid, id, title, body) SELECT rowid, id, title, body FROM notes WHERE is_conflict = 0 AND encryption_applied = 0 AND new.rowid = notes.rowid;
END
CREATE TRIGGER notes_after_insert AFTER INSERT ON notes BEGIN
INSERT INTO notes_fts(docid, id, title, body) SELECT rowid, id, title, body FROM notes WHERE is_conflict = 0 AND encryption_applied = 0 AND new.rowid = notes.rowid;
END;
how to convert existing sqlite database table to fts3 one?
I think the solution is to populate the FTS virtual table by yourself. I mean to open a new thread which will read from the exist database then write to the FTS table.
Actually, I might find a better way, hope you are still watching this thread:
Please check this thread:
SQLite create pre-populated FTS table
where the selected answer gave a better approach:
first do CREATE VIRTUAL TABLE
in your exist database,
then populate the virtual table using the original table within your database.
How to use FTS3 in SQLite
This is explained in the documentation.
You do not need the two indexes for FTS searches.
You should declare the id
column as INTEGER PRIMARY KEY
.
You probably don't need the entry_id
column in the FST table.
Copy the text into the FTS table:
INSERT INTO search_eng_fts(id, re_value, ke_value, g_value)
SELECT id, re_value, ke_value, g_value FROM search_eng;
Then you can use the MATCH
operator to search in that table:
SELECT id FROM search_eng_fts WHERE re_value MATCH 'hello';
SQLAlchemy: Class values not populated in SQLite table after converting csv to dictionaries
Possibly your action queries are not committing. Per SQLAlchemy docs in ORM contexts:
The “autocommit” feature is only in effect when no Transaction has
otherwise been declared. This means the feature is not generally used
with the ORM, as the Session object by default always maintains an
ongoing Transaction.
Consider running transactions in a context manager which handles commits and rollbacks.
...
with engine.begin() as cn:
cn.execute(m_table.delete())
cn.execute(m_table.insert(), cm_dic)
...
with engine.begin() as cn:
cn.execute(s_table.delete())
cn.execute(s_table.insert(), cs_dic)
...
engine.execute("select * from measurement Limit 5")
engine.execute("select * from station limit 5")
Related Topics
SQL Query to Add a New Column After an Existing Column in SQL Server 2005
How to Check If a Table Is Locked in SQL Server
What Does "Select Count(1) from Table_Name" on Any Database Tables Mean
Differencebetween Select and Project Operations
How to Do a Find/Replace in T-Sql
SQL Full Text Search VS "Like"
How to Drop Multiple Columns with a Single Alter Table Statement in SQL Server
Delete the 'First' Record from a Table in SQL Server, Without a Where Condition
Is Substr or Like Faster in Oracle
SQL Query Question: Select ... Not in
How to Force a SQL Server 2008 Database to Go Offline
How to Select Using with Recursive Clause
Sql: When It Comes to Not in and Not Equal To, Which Is More Efficient and Why
Best Way to Reset an Oracle Sequence to the Next Value in an Existing Column
MySQL Create Time and Update Time Timestamp
What's a Good Way (Or Tool) to Version Control a SQLite Database (Schema Only)