ORM SQLAlchemy: не удалось собрать ни один первичный ключ - PullRequest
0 голосов
/ 04 июня 2019

Я попытался реализовать массовую вставку объекта Python SqlAlchemy.Я также настроил таблицу, что первичный ключ user_label и book_label.

Когда я пытаюсь реализовать вставку без вызова установки таблицы первичного ключа для объекта класса,
У меня появляется эта ошибка:

   {"error":{"name":"UnexpectedError","code":10000,"message":"(psycopg2.errors.NotNullViolation) null value in column \"id\" violates not-null constraint\nDETAIL:  Failing row contains (null, user02, AKA6, t, 2019-06-04 00:00:00+00, 2019-06-11 00:00:00+00).\n\n[SQL: INSERT INTO user_fav_books (user_label, book_label, is_free_assigned, free_assign_date, free_assign_end_date) VALUES (%(user_label)s, %(book_label)s, %(is_free_assigned)s, %(free_assign_date)s, %(free_assign_end_date)s)]\n[parameters: ({'book_label': 'AKA6', 'user_label': 'user02', 'free_assign_date': datetime.date(2019, 6, 4), 'free_assign_end_date': datetime.date(2019, 6, 11), 'is_free_assigned': True}, {'book_label': 'AKS6', 'user_label': 'user02', 'free_assign_date': datetime.date(2019, 6, 18), 'free_assign_end_date': datetime.date(2019, 6, 25), 'is_free_assigned': True}, {'book_label': 'AK46', 'user_label': 'user02', 'free_assign_date': datetime.date(2019, 7, 2), 'free_assign_end_date

Не могли бы вы сказать мне: какнастроить объект класса с пользовательской настройкой первичного ключа?

Вот мой код работы:

  class UserFavBooks(Base):
    __tablename__ = 'user_fav_books'
    user_label = Column(String)
    book_label = Column(String)
    is_free_assigned = Column(Boolean , default=True)
    free_assign_date = Column(DateTime(timezone=True), default=func.now())
    free_assign_end_date = Column(DateTime(timezone=True), default=func.now())



  session = sessionmaker(bind=engine)()
  session.connection()

  session.add_all(
        [
            UserFavBooks(
                user_label="user02",
                book_label="AKA6",
                is_free_assigned=True,
                free_assign_date= DT.date.today() + DT.timedelta(days=7*0),
                free_assign_end_date= DT.date.today() + DT.timedelta(days=7*1)                
            ),
            UserFavBooks(
                user_label="user02",
                book_label="AKS6",
                is_free_assigned=True,
                free_assign_date= DT.date.today() + DT.timedelta(days=7*2),
                free_assign_end_date= DT.date.today() + DT.timedelta(days=7*3)                
            ),
            UserFavBooks(
                user_label="user02",
                book_label="AK46",
                is_free_assigned=True,
                free_assign_date= DT.date.today() + DT.timedelta(days=7*4),
                free_assign_end_date= DT.date.today() + DT.timedelta(days=7*5)                
            ),
            UserFavBooks(
                user_label="user02",
                book_label="AK26",
                is_free_assigned=True,
                free_assign_date= DT.date.today() + DT.timedelta(days=7*6),
                free_assign_end_date= DT.date.today() + DT.timedelta(days=7*7)                
            )

        ]
    )  
  session.commit()



  return 'Hello World!'

Если я заменил эти параметры в моем объекте класса,

user_label = Column(String , primary_key=True)
    book_label = Column(String , primary_key=True)

это даст:

Нарушение ненулевого идентификатора.В моей таблице базы данных у меня нет id вообще.И сообщение об ошибке дает мне указание, что мне нужно вставить идентификатор, который совершенно не имеет смысла для вставки новых данных.

{"error":{"name":"UnexpectedError","code":10000,"message":"(psycopg2.errors.NotNullViolation) null value in column \"id\" violates not-null constraint\nDETAIL:  Failing row contains (null, user02, AKA6, t, 2019-06-04 00:00:00+00, 2019-06-11 00:00:00+00).\n\n[SQL: INSERT INTO user_fav_books (user_label, book_label, is_free_assigned, free_assign_date, free_assign_end_date) VALUES (%(user_label)s, %(book

Вот мой дизайн таблицы базы данных:

enter image description hereenter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...