Я использую sqlalchemy в качестве ORM для взаимодействия в python с базой данных Postgresql.Я разработал классы Python, определяющие модели данных sqlalchemy.Вот мой пример использования: в файле Excel я определил для каждой модели данных лист с данными.В каждом рабочем листе столбцы соответствуют переменным и строкам данных.
Я написал скрипт на Python, который читает файл Excel, я создаю строки в postgresl для каждой строки на листе.Эта часть работает !!
MODELS_CONSTRUCTORS = [ # Python Classes defining Sqalalchemy models
{"User" : User()},
{"Entity" : Entity()},
{"BusinessProfile" : BusinessProfile()},
{"Role" : Role()}
]
CONNECTOR = SqlaConnector()
SESSION = SqlaConnector().session
ENGINE = SqlaConnector().engine
def create_dataset():
try:
# Initialize Models
###### SECTION THAT WORKS ########
for model_constructor in MODELS_CONSTRUCTORS:
for model, constructor in model_constructor.items():
dataframe = pd.read_excel(xls, model).fillna("") # xls : content of an excel file retrieved with pandas
for index in dataframe.index:
new_instance_of_model = constructor
for column in dataframe.columns:
setattr(new_instance_of_model, column_name, str(dataframe[column][index]))
make_transient(new_instance_of_model)
SESSION.add(new_instance_of_model) # sqlalchemy session
SESSION.commit()
##########################################
###### SECTION THAT DOES NOT WORK ########
print("test insert user (manual)")
new_user = User()
new_user.firstname = "myFirstname2"
new_user.lastname = "myLastname2"
new_user.email = "myEmail12@myBox.com"
new_user.status="Unconfirmed"
SESSION.add(new_user)
SESSION.commit()
print("END")
##########################################
except Exception as ex:
print("Error in data initialization. %s" % str(ex))
SESSION.rollback()
Однако, когда я пытаюсь обычным способом создать новый элемент (например, нового пользователя), я получаю следующую ошибку:
sqlalchemy.exc.IntegrityError
IntegrityError: (IntegrityError) duplicate key value violates unique constraint "users_key"
DETAIL: Key (id)=(1) already exists. # id is the primary key in my data model
Кажется, что sqlalchemy не может обнаружить, что в базе данных уже есть пользователи, и попытаться вставить пользователя в первую строку (следовательно, DETAIL: Key (id) = (1) уже существует)
Я был быочень благодарен, если вы можете помочь с этим вопросом.