Стоит задача потренироваться Python + sql
Хочу попробовать сделать минимальное подобие orm.
Начал с написания классов типов полей и отношений.
Есть классы Field, CharField etc..
у меня возникли трудности с их реализацией.
использовать алхимию и другие орм не хочу - это уже готовы орм, у меня задача другая.
вот пару примеров того что я сделал.
Я не знаю насколько это неправильно и не пойму как реализовать отношения ForeignKey and OneToOneField
валидации пока не делаю.
Подскажите что не правильно, что дописать а что убрать.особенно важен момент с отношениями
дальше буду через форматирование строк в sql вставлять значения и делать таблицы,строки.
пока все работает кроме отношений
class Field(object): def __init__(self, name, column_type, primary_key, default): self.name = name self.column_type = column_type self.primary_key = primary_key self.default = default def __str__(self): return '<%s, %s, %s>' % (self.__class__.__name__, self.column_type, self.name) class VarcharField(Field): def __init__(self, name=None, primary_key=False, default=None, ddl='varchar(100)', max_len=4): super(VarcharField, self).__init__(name, ddl, primary_key, default) self.max_len = max_len self.field_type_sql = f'VARCHAR' class OneToOneField(Field): def __init__(self, rel_class, name=None): super(OneToOneField, self).__init__( name, primary_key=False, default=0, column_type=None ) self.rel_class = rel_class class ForeignKey(Field): def __init__(self, model_class, name=None): self.column_type = "foreignkey" self.field_level = 1 self.name = name self.model_class = model_class def field_sql(self, field_name): foreign_to = self.model_class.__name__.lower() return '"%s" integer NULL REFERENCES "%s" ("id")' % (field_name, foreign_to)