Skip to main content

A thread safe queue worker that executes SQL for multi-threaded applications.

Project description

Sqlite3 Execution Queue

version license pyversions
donate powered made

A thread safe queue worker that executes SQL for multi-threaded applications.

Hierarchy

sqlqueue
'---- SqlQueue()
    |---- sql()
    |---- _sql()
    |---- commit()
    '---- stop()

Example

python

from sqlq import *

# specify the db file, relative or absolute path
sqlqueue = SqlQueue(r"db.db")

# SQL execution modes
# all will return the executed SQL result immediately
SqlQueue("default", timeout_commit=1000).sql("SELECT * FROM table;")
SqlQueue("commit per 1ms", timeout_commit=1).sql("INSERT INTO table VALUES (?);", (0,))
SqlQueue(r"C:\somewhere\db.db").sql("INSERT INTO table VALUES (?);", ((0,),(0,)))
SqlQueue("../../data/db.db").sql('''
CREATE TABLE "tablea" ("a" TEXT);
DELETE TABLE "table";
''')

# stop the worker
# use it at your own risk
# otherwise data will be lost
# always commit before stopping it
sqlqueue.commit()
sqlqueue.stop()

# run benchmark
# this example shows how sqlq is used
# SQL should not be executed frequently
# see next example for sqlq usage
r = (1, 5, 10, 50, 100, 200)
r = (50,)
for l in r:
    tw = ThreadWrapper(threading.Semaphore(l))
    starttime = time.time()
    for i in range(l):
        def job(i):
            sqlqueue._sql(threading.get_ident(), "INSERT INTO test VALUES (?);", (str(i),))
        tw.add(job, args=args(i))
    tw.wait()
    p(l, (time.time()-starttime)/l, time.time()-starttime)
    # p(sqlqueue.sql("SELECT * FROM test;"))
    tw = ThreadWrapper(threading.Semaphore(l))
    starttime = time.time()
    for i in range(l):
        def job(i):
            sqlqueue._sql(threading.get_ident(), f"DELETE FROM test WHERE a = ?;", (str(i),))
        tw.add(job, args=args(i))
    tw.wait()
    p(l, (time.time()-starttime)/l, time.time()-starttime)
    # in order to use SqlQueue()._sql(), ThreadWrapper() is
    # recommended to queue threads, check threadwrapper for more info
    # SqlQueue()._sql() will raise execution error
    # it will only report it to the result
    # you should handle the errors separately


    starttime = time.time()
    for i in range(l):
        sqlqueue.sql("INSERT INTO test VALUES (?);", (str(i),))
    p(l, (time.time()-starttime)/l, time.time()-starttime)
    # p(sqlqueue.sql("SELECT * FROM test;"))
    starttime = time.time()
    for i in range(l):
        sqlqueue.sql(f"DELETE FROM test WHERE a = ?;", (str(i),))
    p(l, (time.time()-starttime)/l, time.time()-starttime)
    p()
    sqlqueue.commit()  # manual commit
    # both manual and timeout commit always wait until
    # the current SQL execution is completed. 
    # the worker will not raise any error
    # however SqlQueue().sql() will re-raise execution error

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sqlq-0.0.6.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

sqlq-0.0.6-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file sqlq-0.0.6.tar.gz.

File metadata

  • Download URL: sqlq-0.0.6.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.0

File hashes

Hashes for sqlq-0.0.6.tar.gz
Algorithm Hash digest
SHA256 32fc9ebedd110313058399e0c6597bd2a658ea1316491e797939d2bb778ca5de
MD5 346584e9e61035de7f9cf23cd92adc12
BLAKE2b-256 178da899cf6a992661a07663919305b7b0bbd57cd771d5fe8248dfe6056fccd8

See more details on using hashes here.

File details

Details for the file sqlq-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: sqlq-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.0

File hashes

Hashes for sqlq-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 d5dbe306ee6ead4f77d426d1d3064840c2b8a2d6e48142c9d9061546aa2f2b05
MD5 f563c5e5d3302e4fd0db951e7d091382
BLAKE2b-256 cb7195b5bd011af98d3b238789c24d28290d78081988ce1828d5fcb1921cd1fb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page