Я попытался реализовать массовую вставку объекта 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
Вот мой дизайн таблицы базы данных: