gravmatt/sqlitemodel

Default Values not populated into Tables with Default Values.

Opened this issue · 0 comments

I set up a table with this query:

CREATE TABLE "FCMembers" (
	"memberId"	TEXT NOT NULL UNIQUE,
	"name"	TEXT,
	"money"	INTEGER DEFAULT 1000,
	PRIMARY KEY("memberId")
);

Then I created a model with this code:

from sqlitemodel import Model, Database

CONFIG = "path/to/my/db"


class FCMember(Model):
    def __init__(self, memberId: str = "", dbfile=CONFIG):
        Database.DB_FILE = dbfile
        Model.__init__(self, memberId, dbfile=dbfile, foreign_keys=True)
        
        # The DiscordID of this member
        self.memberId = memberId
        # This is implicit from Model
        
        # The DiscordName of this member
        self.name = ""
        
        # The number of fox tokens this member has
        self.money = ""
        
        self.getModel()
        
    @staticmethod
    def tablename():
        return 'FCMembers'
    @staticmethod
    def columns():
        return [
            {
                "name":'memberId',
                "type":'TEXT',
            },
            {
                "name":'name',
                "type":'TEXT',
            },
            {
                "name":'money',
                "type":'INTEGER',
            },
        ]
fc_member = MyModel("1234")
fc_member.createTable()
fc_member.save()

print(fc_member.money) # outputs: ""

And the table had a new entry into it:
memberId name fox_tokens
1

When retrieving the money value, the default value was not applied to the model (which I can understand).

However, the table was given a new row with the correct ID in the ID field, a NULL name field, and a NULL money field. The default value was not populated into the field.