Python.Хранение в БД в значках - заменить, если новый Id - PullRequest
0 голосов
/ 21 мая 2019

Я пишу в базу данных в виде значков пользователей X одновременно и хочу обновить информацию о пользователе (заменить строку). Я хочу иметь только одну строку для каждого пользователя.

Однако при использовании параметра if_exists='replace' новый значок заменяет старый значок (удаляя предыдущих -distinct- пользователей).

И если вместо этого я сделаю 'append', я получу множество дубликатов.

В моей таблице несколько столбцов в виде PK, поэтому я использую это определение из krvkir: https://stackoverflow.com/a/31045044/9153261

def to_sql_k(self, frame, name, if_exists='fail', index=False, index_label=None, 
             schema=None, chunksize=None, dtype=None, **kwargs):
    '''Definition to add PK'''
    if dtype is not None:
        for col, my_type in dtype.items():
            if not isinstance(to_instance(my_type), TypeEngine):
                raise ValueError('The type of %s is not a SQLAlchemy '
                                    'type ' % col)

    table = pd.io.sql.SQLTable(name, self, frame=frame, index=index,
                        if_exists=if_exists, index_label=index_label,
                        schema=schema, dtype=dtype, **kwargs)
    table.create()
    table.insert(chunksize)

И я использую это другое определение для хранения информации в БД:

def writting_in_db(df, user_list, engine):
    try:    
        ddtype={
            'User': INTEGER,
            'C1': INTEGER,
            'C2': INTEGER
        }

        pandas_sql = pd.io.sql.pandasSQL_builder(engine)
        to_sql_k(pandas_sql, df, 'TableName', keys=('User', 'C1'), 
                 if_exists='append', dtype=ddtype)

    except:
        print("Exception, this list of users was not updated into database:\n")
        sys.stdout.flush()
        print(user_list)
        sys.stdout.flush()

Любое решение, которое не «удаляет ВСЕ содержимое базы данных перед каждой итерацией»?

И, в идеале, это не так: «Опрашивать всех существующих пользователей в БД и выполнять итерацию, чтобы увидеть, присутствуют ли они в новом df для экспорта».

Salut,

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