Skip to content

Commit 8ca6b2a

Browse files
feat: add database.create_tables config setting
Users can disable automatic table creation for production mode: dj.config.database.create_tables = False Or via environment variable DJ_CREATE_TABLES or datajoint.json. When False, Schema will raise an error when accessing missing tables instead of creating them. Explicit create_tables=True in Schema() overrides the config setting. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 6a955c1 commit 8ca6b2a

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/datajoint/schemas.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ class Schema:
7272
create_schema : bool, optional
7373
If False, raise error if schema doesn't exist. Default True.
7474
create_tables : bool, optional
75-
If False, raise error when accessing missing tables. Default True.
75+
If False, raise error when accessing missing tables.
76+
Default from ``dj.config.database.create_tables`` (True unless configured).
7677
add_objects : dict, optional
7778
Additional objects for the declaration context.
7879
@@ -93,7 +94,7 @@ def __init__(
9394
*,
9495
connection: Connection | None = None,
9596
create_schema: bool = True,
96-
create_tables: bool = True,
97+
create_tables: bool | None = None,
9798
add_objects: dict[str, Any] | None = None,
9899
) -> None:
99100
"""
@@ -110,15 +111,16 @@ def __init__(
110111
create_schema : bool, optional
111112
If False, raise error if schema doesn't exist. Default True.
112113
create_tables : bool, optional
113-
If False, raise error when accessing missing tables. Default True.
114+
If False, raise error when accessing missing tables.
115+
Default from ``dj.config.database.create_tables`` (True unless configured).
114116
add_objects : dict, optional
115117
Additional objects for the declaration context.
116118
"""
117119
self.connection = connection
118120
self.database = None
119121
self.context = context
120122
self.create_schema = create_schema
121-
self.create_tables = create_tables
123+
self.create_tables = create_tables if create_tables is not None else config.database.create_tables
122124
self.add_objects = add_objects
123125
self.declare_list = []
124126
if schema_name:

src/datajoint/settings.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"database.password": "DJ_PASS",
6262
"database.port": "DJ_PORT",
6363
"database.schema_prefix": "DJ_SCHEMA_PREFIX",
64+
"database.create_tables": "DJ_CREATE_TABLES",
6465
"loglevel": "DJ_LOG_LEVEL",
6566
}
6667

@@ -192,6 +193,12 @@ class DatabaseSettings(BaseSettings):
192193
description="Project-specific prefix for schema names. "
193194
"Not automatically applied; use dj.config.database.schema_prefix when creating schemas.",
194195
)
196+
create_tables: bool = Field(
197+
default=True,
198+
validation_alias="DJ_CREATE_TABLES",
199+
description="Default for Schema create_tables parameter. "
200+
"Set to False for production mode to prevent automatic table creation.",
201+
)
195202

196203

197204
class ConnectionSettings(BaseSettings):

0 commit comments

Comments
 (0)