piccolo icon indicating copy to clipboard operation
piccolo copied to clipboard

using db_column_name with ForeignKey breaks objects().select(...) when using prefetch

Open jessemcl-flwls opened this issue 4 months ago • 2 comments

Thank you for addressing this issue so quickly: https://github.com/piccolo-orm/piccolo/issues/1101

Sadly, this rabbit hole might go a bit deeper. With the above fix, I immediately ran into the next possibly related thing:

Again, if I have two tables with a foreign key relationship between them, and I specify the relationship using a custom db_column_name, eg:

class FooTable(Table, tablename="foo", schema="public"):
    id = Varchar(length=20, primary_key=True, null=False)
    name = Varchar(length=64, unique=True, null=False)

class BarTable(Table, tablename="bar", schema="public"):
    id = Varchar(length=20, primary_key=True, null=False)
    foo = ForeignKey(references=FooTable, null=False, db_column_name="foo_id")

Then when I try to query this relationship using prefetch:

bar = await BarTable.objects(BarTable.foo).where(BarTable.foo.id == "abc").first()

Then I get an error saying there is no matching column found.

If I leave out the prefetch, then it works without error, with the resulting dict containing the property:

  "foo": "abc"

jessemcl-flwls avatar Oct 18 '24 13:10 jessemcl-flwls