mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-09-28 12:54:15 +02:00
Support Database(memory=True) for in-memory databases
This commit is contained in:
parent
58db40d67c
commit
034d498b31
4 changed files with 25 additions and 6 deletions
|
|
@ -27,7 +27,7 @@ If you want to create an in-memory database, you can do so like this:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
db = Database(sqlite3.connect(":memory:"))
|
db = Database(sqlite3.connect(memory=True))
|
||||||
|
|
||||||
Tables are accessed using the indexing operator, like so:
|
Tables are accessed using the indexing operator, like so:
|
||||||
|
|
||||||
|
|
@ -37,6 +37,14 @@ Tables are accessed using the indexing operator, like so:
|
||||||
|
|
||||||
If the table does not yet exist, it will be created the first time you attempt to insert or upsert data into it.
|
If the table does not yet exist, it will be created the first time you attempt to insert or upsert data into it.
|
||||||
|
|
||||||
|
You can also access tables using the ``.table()`` method like so:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
table = db.table("my_table")
|
||||||
|
|
||||||
|
Using this factory function allows you to set :ref:`python_api_table_configuration`.
|
||||||
|
|
||||||
Listing tables
|
Listing tables
|
||||||
==============
|
==============
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,8 +85,13 @@ class NotFoundError(Exception):
|
||||||
|
|
||||||
|
|
||||||
class Database:
|
class Database:
|
||||||
def __init__(self, filename_or_conn):
|
def __init__(self, filename_or_conn=None, memory=False):
|
||||||
if isinstance(filename_or_conn, str):
|
assert (filename_or_conn is not None and not memory) or (
|
||||||
|
filename_or_conn is None and memory
|
||||||
|
), "Either specify a filename_or_conn or pass memory=True"
|
||||||
|
if memory:
|
||||||
|
self.conn = sqlite3.connect(":memory:")
|
||||||
|
elif isinstance(filename_or_conn, str):
|
||||||
self.conn = sqlite3.connect(filename_or_conn)
|
self.conn = sqlite3.connect(filename_or_conn)
|
||||||
elif isinstance(filename_or_conn, pathlib.Path):
|
elif isinstance(filename_or_conn, pathlib.Path):
|
||||||
self.conn = sqlite3.connect(str(filename_or_conn))
|
self.conn = sqlite3.connect(str(filename_or_conn))
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,15 @@
|
||||||
from sqlite_utils import Database
|
from sqlite_utils import Database
|
||||||
from sqlite_utils.utils import sqlite3
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def fresh_db():
|
def fresh_db():
|
||||||
return Database(sqlite3.connect(":memory:"))
|
return Database(memory=True)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def existing_db():
|
def existing_db():
|
||||||
database = Database(sqlite3.connect(":memory:"))
|
database = Database(memory=True)
|
||||||
database.conn.executescript(
|
database.conn.executescript(
|
||||||
"""
|
"""
|
||||||
CREATE TABLE foo (text TEXT);
|
CREATE TABLE foo (text TEXT);
|
||||||
|
|
|
||||||
|
|
@ -727,3 +727,10 @@ def test_create_table_numpy(fresh_db):
|
||||||
"np.uint8": 8,
|
"np.uint8": 8,
|
||||||
}
|
}
|
||||||
] == list(fresh_db["types"].rows)
|
] == list(fresh_db["types"].rows)
|
||||||
|
|
||||||
|
|
||||||
|
def test_cannot_provide_both_filename_and_memory():
|
||||||
|
with pytest.raises(
|
||||||
|
AssertionError, match="Either specify a filename_or_conn or pass memory=True"
|
||||||
|
):
|
||||||
|
db = Database("/tmp/foo.db", memory=True)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue