IntegrityError: (pymysql.err.IntegrityError) (1062, «Дублирующая запись» для ключа «PRIMARY» ») с использованием sqlalchmey для вставки данных - PullRequest
0 голосов
/ 06 октября 2018

Я создаю таблицу, используя sqlalchmey:

import numpy as np
import pandas as pd
import time
import pickle
from datetime import datetime
from operator import itemgetter
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,String,Float,TIMESTAMP

Base = declarative_base()
class  Ibm_Batch_Tbl_Copy(Base):
__tablename__ = "IBM_BATCH_TBL_COPY"
DB_CODE = Column(String(50),primary_key=True)
DB_OWNER = Column(String(30),primary_key=True)
TABLE_NAME = Column(String(128),primary_key=True)
ROW_CNT = Column(Integer,nullable=True)
TABLE_TIME = Column(Float,nullable=True)
DAY_ID = Column(String(10),nullable=True)
BAT_NO = Column(String(20),nullable=True)
INSERT_TIME = Column(TIMESTAMP(timezone=False),nullable=False)
DEL_FLAG = Column(String(1),nullable=True,server_default=text('0'))
REMARK = Column(String(500),nullable=True)

Base.metadata.create_all(engine)

Создание таблицы в порядке, но когда я вставляю в нее данные, она идет не так, данные dff:

db_code  db_owner         table_name  row_cnt  table_time   bat_no  \
0   D1022  SOURCING        DIM_COMPANY      0.0    0.157496  D1022_0   
1   D1022  SOURCING   DIM_COMPANY_SITE      0.0    0.157496  D1022_0   
2   D1022  SOURCING       DIM_CONTRACT      0.0    0.157496  D1022_0   
3   D1022  SOURCING    DIM_COST_CENTER      0.0    0.157496  D1022_0   
4   D1022  SOURCING  DIM_ERP_COMMODITY      0.0    0.157496  D1022_0   

                 insert_time    day_id  
0 2018-10-06 17:51:27.707801  20181006  
1 2018-10-06 17:51:27.707801  20181006  
2 2018-10-06 17:51:27.707801  20181006  
3 2018-10-06 17:51:27.707801  20181006  
4 2018-10-06 17:51:27.707801  20181006  

, а затем:

a = []
for i in dff.iterrows():
    a.append(dict(i[1]))
engine.execute(Ibm_Batch_Tbl_Copy.__table__.insert(),a)

но все пошло не так: IntegrityError: (pymysql.err.IntegrityError) (1062, "Duplicate entry '' for key 'PRIMARY'") [SQL: 'INSERT INTO IBM_BATCH_TBL_COPY () VALUES ()'] [parameters: ({}, {}, {}, {}, {})] (Background on this error at: http://sqlalche.me/e/gkpj).

Не удается вставить данные с тремя первичными ключами?

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