Comments (2)
When directly preparing a statement, the resulting Stmt has column-index based setters and Named arg based setters, but neither allow for specifying a row number (and the underlying structures are 1-dimensional).
When using sqlitex
Execute
orExecuteTransient
functions, theExecOptions
only has 1-dimensionalArgs
andNamed
fields.
Your understanding is correct and matches what SQLite provides.
I can generate a giant SQL statement directly with no arguments that has multiple rows in VALUES and call
ExecuteTransient
, but it doesn't benefit from being a prepared statement and I need to do it millions of times.
You can do an INSERT
with parameters too:
INSERT INTO foo ( "id" ) VALUES (:row1_id), (:row2_id), (:row3_id);
Am I missing something here?
A couple things, perhaps:
- You can reuse the same prepared statement with
Stmt.Reset
andStmt.ClearBindings
to run a single-row insert multiple times. This avoids having to re-parse the SQL statement, and is a fairly common way of inserting a lot of data at once. - If you are performing data modification outside of an explicit transaction (autocommit mode), SQLite will wrap each statement in an implicit transaction. By default, this has the side-effect of performing a full
fsync
on each commit, which will be very slow. You likely want to start a transaction, perform all your inserts, then commit the transaction.
from go-sqlite.
Much appreciated! The INSERT example you provided would only work with a single column data, as far as I can see there is no way to replace :row1_id
with multiple columns worth of data.
I'll do some performance testing, but it looks like using a SAVEPOINT or TRANSACTION around a bunch of INSERTs through a prepared statement will be the way to go.
from go-sqlite.
Related Issues (20)
- postgres style $1/$2 are treated as named arguments HOT 3
- how to use SetCollation HOT 1
- ability to customize connection creatd by sqlitex.Pool HOT 1
- Support the VFS API HOT 1
- error creating a transaction: sqlitex.Exec: sqlite: clear bindings: interrupted
- Pool.Close blocks indefinitely when a panic happens during iteration of statement rows
- Add a Pool interface? HOT 2
- BlockOnBusy backoff period is long HOT 5
- Undefined symbols in sqlite v.1.29.0 HOT 2
- Support pointer-passing
- JSONB support
- sqlitex.Pool.Get should be able to return an error HOT 3
- Extented error codes aren't reported properly HOT 1
- Document pattern of checking for zero rows HOT 6
- file:memory does not appear to work HOT 4
- Stmt.findBindName shoud be public HOT 3
- Unexpected error: "migrate database: sqlite: step: database is locked"
- [UNHELPFUL ERROR MSG] obscure panic on closed connection HOT 1
- Possible to bind arrays, for use in e.g. `IN (?)` queries? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from go-sqlite.