Оратор ORM модель Создать метод неверный SQL - PullRequest
0 голосов
/ 05 октября 2018

У меня есть база данных, которую я создал с помощью миграции.Одна из моих таблиц выглядит следующим образом

def create_customer_table(self):
        with self.schema.create("customer") as table:
        table.char("name",120).unique()
        table.integer("transmitting_hours").default(24) #how many hours after transmission vehicle is considered transmitting
        table.boolean("is_tpms").default(False)
        table.boolean("is_dor").default(False)
        table.boolean("is_otr").default(False)
        table.boolean("is_track_and_trace").default(False)
        table.char("contact_person",25)
        table.char("created_by",25)
        table.enum("temperature_unit",TEMP_UNITS)
        table.enum("pressure_unit",PRESSURE_UNITS)
        table.enum("distance_unit",DISTANCE_UNITS)
        table.char("time_zone",25)
        table.char("language",2)
        table.timestamps()

У меня очень упрощенная модель ORM сверху

class Customer(Model):
     __table__ = "customer"
     __timestamps__ = False
     __primary_key__ = "name"
     __fillable__ = ['*']

Затем я пытаюсь выполнить базовую вставку со следующим кодом

def add_sample_customer():
    sample_customer = {}
    sample_customer["name"] = "customer_2"
    sample_customer["contact_person"] = "Abradolf"
    sample_customer["created_by"] = "Frodo"
    sample_customer["time_zone"] = "GMT-5"
    sample_customer["language"] = "EN"
    sample_customer["temperature_unit"] = "FAHRENHEIT"
    sample_customer["pressure_unit"] = "PSI"
    sample_customer["distance_unit"] = "MI"
    customer_model = Customer.create(_attributes = sample_customer)

Исключение, которое я получаю из этого кода, выглядит так:

orator.exceptions.query.QueryException: syntax error at or near ")"
LINE 1: INSERT INTO "customer" () VALUES () RETURNING "name"                               
(SQL: INSERT INTO "customer" () VALUES () RETURNING "name" ([]))

похоже, оратор просто не заполняет здесь значения cols и vals.Я также попробовал это с несколькими различными синтаксическими способами добавления туда dict, используя ** sample_customer, а также просто вставляя dict напрямую, и ни один из них не работал, все с тем же исключением.Я начал отладку, печатая материал из библиотек оратора, но еще нигде не получил.

мои вставки работают, если я выполняю индивидуальное присвоение атрибута модели и использую метод model.save (), подобный этому

def add_sample_customer():
    sample_customer = {}
    sample_customer["name"] = "customer_2"
    sample_customer["contact_person"] = "Abradolf"
    sample_customer["created_by"] = "Frodo"
    sample_customer["time_zone"] = "GMT-5"
    sample_customer["language"] = "EN"
    sample_customer["temperature_unit"] = "FAHRENHEIT"
    sample_customer["pressure_unit"] = "PSI"
    sample_customer["distance_unit"] = "MI"
    customer_model = Customer()
    for k,v in sample_customer.items():
        setattr(customer_model,k,v)
    customer_model.save()

Кто-нибудь понимает, почему синтаксис model.create () не работает?

1 Ответ

0 голосов
/ 25 мая 2019

Я думаю, что ответ будет таким: просто передать словарь вместо использования ключевой нотации с атрибутами:

Customer.create(sample_customer) 

или

Customer.create(attribute=value,attribute2=value2,..etc)

Какие действительные обозначения

...