#33982 closed Bug (fixed)
TypeError creating DB table SQL with ExclusionConstraint as Statement returned instead of str
| Reported by: | James Beith | Owned by: | James Beith |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | 4.1 |
| Severity: | Release blocker | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Whilst upgrading from Django 4.0.7 to 4.1 we've hit an exception attempting to run our test suit.
We have some models with Postgres ExclusionConstraint constraints. When these constraints constraint_sql() is called here as part of building the test database, a Statement object is returned, instead of a str, and we crash when attempting to join them here
Looks like the ExclusionConstraint switched to returning a Statement instead of a str in this PR #15235.
Stacktrace below if it helps.
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/pytest_django/plugin.py:465: in _django_db_marker
request.getfixturevalue("_django_db_helper")
src/tests/conftest.py:966: in django_db_setup
db_cfg = setup_databases(
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/test/utils.py:220: in setup_databases
connection.creation.create_test_db(
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/db/backends/base/creation.py:78: in create_test_db
call_command(
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/core/management/__init__.py:198: in call_command
return command.execute(*args, **defaults)
src/acme-corp/interfaces/common/management_commands.py:50: in execute
return super().execute(*args, **options)
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/core/management/base.py:448: in execute
output = self.handle(*args, **options)
src/acme-corp/interfaces/systemjobs/management/commands/migrate.py:31: in handle
super().handle(*args, **options)
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/pytest_django/fixtures.py:276: in handle
return super().handle(*args, **kwargs)
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/core/management/base.py:96: in wrapped
res = handle_func(*args, **kwargs)
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/core/management/commands/migrate.py:314: in handle
self.sync_apps(connection, executor.loader.unmigrated_apps)
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/core/management/commands/migrate.py:476: in sync_apps
editor.create_model(model)
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/db/backends/base/schema.py:446: in create_model
sql, params = self.table_sql(model)
../../../../.virtualenvs/acme-corp/lib/python3.8/site-packages/django/db/backends/base/schema.py:272: in table_sql
"definition": ", ".join(
E TypeError: sequence item 9: expected str instance, Statement found
Attachments (1)
Change History (7)
comment:1 by , 3 years ago
| Severity: | Normal → Release blocker |
|---|---|
| Triage Stage: | Unreviewed → Accepted |
comment:4 by , 3 years ago
| Has patch: | set |
|---|---|
| Owner: | changed from to |
| Status: | new → assigned |
| Triage Stage: | Accepted → Ready for checkin |
Note:
See TracTickets
for help on using tickets.
Thanks for the report! Regression in 0e656c02fe945389246f0c08f51c6db4a0849bd2.