PythonNewbie
PythonNewbie

Reputation: 1163

How to add attributes to database columns

Im currently working on creating correct database columns for my database. I have created two tables and used alter:

CREATE TABLE stores (
    id SERIAL PRIMARY KEY,
    store_name TEXT
    -- add more fields if needed
);


CREATE TABLE products (
    id SERIAL, 
    store_id INTEGER NOT NULL,
    title TEXT,
    image TEXT,
    url TEXT UNIQUE, 
    added_date timestamp without time zone NOT NULL DEFAULT NOW(),
    PRIMARY KEY(id, store_id)
);


ALTER TABLE products
ADD  CONSTRAINT "FK_products_stores" FOREIGN KEY ("store_id")
        REFERENCES stores (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE RESTRICT;

Now I am trying to use it together with PeeWee and I have managed to do a small step which is:

class Stores(Model):
    id = IntegerField(column_name='id')
    store_id = TextField(column_name='store_name')

class Products(Model):
    id = IntegerField(column_name='id')
    store_id = IntegerField(column_name='store_id')
    title = TextField(column_name='title')
    url = TextField(column_name='url')
    image = TextField(column_name='image')

However my problem is that I have used:

ALTER TABLE products
ADD  CONSTRAINT "FK_products_stores" FOREIGN KEY ("store_id")
        REFERENCES stores (id) MATCH SIMPLE
        ON UPDATE NO ACTION
        ON DELETE RESTRICT;

which means that I do have a Foreign key and I am quite not sure how I can apply to use Foreign key together with PeeWee. I wonder how can I do that?

Upvotes: 0

Views: 251

Answers (1)

ESG
ESG

Reputation: 9425

You need to add a ForeignKeyField to Products and remove store_id

class Products(Model):
    id = IntegerField(column_name='id')
    title = TextField(column_name='title')
    url = TextField(column_name='url')
    image = TextField(column_name='image')
    store = ForeignKeyField(Stores, backref='products')

Upvotes: 1

Related Questions