test other fk creation

This commit is contained in:
collerek
2021-02-01 14:53:34 +01:00
parent 5a4c42b318
commit 31e15bd7ba
2 changed files with 18 additions and 13 deletions

View File

@ -3,6 +3,7 @@ import logging
from typing import Dict, List, Optional, TYPE_CHECKING, Tuple, Type, Union from typing import Dict, List, Optional, TYPE_CHECKING, Tuple, Type, Union
import sqlalchemy import sqlalchemy
from sqlalchemy import ForeignKeyConstraint
from ormar import ForeignKey, Integer, ModelDefinitionError # noqa: I202 from ormar import ForeignKey, Integer, ModelDefinitionError # noqa: I202
from ormar.fields import BaseField, ManyToManyField from ormar.fields import BaseField, ManyToManyField
@ -234,12 +235,18 @@ def populate_meta_sqlalchemy_table_if_required(meta: "ModelMeta") -> None:
if not hasattr(meta, "table") and check_for_null_type_columns_from_forward_refs( if not hasattr(meta, "table") and check_for_null_type_columns_from_forward_refs(
meta meta
): ):
if meta.tablename == 'albums':
meta.constraints.append(ForeignKeyConstraint(['artist'],['artists.id'],
ondelete='CASCADE',
onupdate='CASCADE'))
table = sqlalchemy.Table( table = sqlalchemy.Table(
meta.tablename, meta.tablename,
meta.metadata, meta.metadata,
*[copy.deepcopy(col) for col in meta.columns], *[copy.deepcopy(col) for col in meta.columns],
*meta.constraints, *meta.constraints,
) )
if meta.tablename == 'albums':
pass
meta.table = table meta.table = table

View File

@ -29,7 +29,7 @@ class Album(ormar.Model):
tablename = "albums" tablename = "albums"
metadata = metadata metadata = metadata
database = database database = database
constraint = [ForeignKeyConstraint(['albums'],['albums.id'])] constraint = []
id: int = ormar.Integer(primary_key=True) id: int = ormar.Integer(primary_key=True)
name: str = ormar.String(max_length=100) name: str = ormar.String(max_length=100)
@ -55,20 +55,18 @@ def create_test_database():
metadata.drop_all(engine) metadata.drop_all(engine)
metadata.create_all(engine) metadata.create_all(engine)
yield yield
metadata.drop_all(engine) # metadata.drop_all(engine)
def test_table_structures():
col = Album.Meta.table.columns.get('artist')
inspector = inspect(engine)
col2 = inspector.get_columns('albums')
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_simple_cascade(): async def test_simple_cascade():
async with database: async with database:
async with database.transaction(force_rollback=True): # async with database.transaction(force_rollback=True):
artist = await Artist(name='Dr Alban').save() artist = await Artist(name='Dr Alban').save()
await Album(name="Jamaica", artist=artist).save() await Album(name="Jamaica", artist=artist).save()
await Artist.objects.delete(id=artist.id) await Artist.objects.delete(id=artist.id)
albums = await Album.objects.all() artists = await Artist.objects.all()
assert len(albums) == 0 assert len(artists) == 0
# breakpoint()
albums = await Album.objects.all()
assert len(albums) == 0