|
def __init__( |
|
self, |
|
filename_or_conn: Optional[Union[str, pathlib.Path, sqlite3.Connection]] = None, |
|
memory: bool = False, |
|
memory_name: Optional[str] = None, |
|
recreate: bool = False, |
|
recursive_triggers: bool = True, |
|
tracer: Optional[Callable] = None, |
|
use_counts_table: bool = False, |
|
execute_plugins: bool = True, |
|
): |
|
assert (filename_or_conn is not None and (not memory and not memory_name)) or ( |
|
filename_or_conn is None and (memory or memory_name) |
|
), "Either specify a filename_or_conn or pass memory=True" |
|
if memory_name: |
|
uri = "file:{}?mode=memory&cache=shared".format(memory_name) |
|
self.conn = sqlite3.connect( |
|
uri, |
|
uri=True, |
|
check_same_thread=False, |
|
) |
|
elif memory or filename_or_conn == ":memory:": |
|
self.conn = sqlite3.connect(":memory:") |
|
elif isinstance(filename_or_conn, (str, pathlib.Path)): |
|
if recreate and os.path.exists(filename_or_conn): |
|
try: |
|
os.remove(filename_or_conn) |
|
except OSError: |
|
# Avoid mypy and __repr__ errors, see: |
|
# https://github.com/simonw/sqlite-utils/issues/503 |
|
self.conn = sqlite3.connect(":memory:") |
|
raise |
|
self.conn = sqlite3.connect(str(filename_or_conn)) |
|
else: |
|
assert not recreate, "recreate cannot be used with connections, only paths" |
|
self.conn = filename_or_conn |
|
self._tracer = tracer |
|
if recursive_triggers: |
|
self.execute("PRAGMA recursive_triggers=on;") |
|
self._registered_functions: set = set() |
|
self.use_counts_table = use_counts_table |
|
if execute_plugins: |
|
pm.hook.prepare_connection(conn=self.conn) |
Currently the constructor accepts
memory=Trueormemory_name=...and uses those to create a connection, but does not record what those values were:sqlite-utils/sqlite_utils/db.py
Lines 307 to 349 in 1260bdc
This makes it hard to tell if a database object is to an in-memory or a file-based database, which is sometimes useful to know.