SQLite3x.update

def update(
        self,
        TABLE: Union[AnyStr, AbstractTable],
        SET: Union[List, Tuple, Mapping],
        WHERE: WhereType = None,
        OR: OrOptionsType = None,
        WITH: WithType = None,
        **kwargs,
) -> None:
    """
    UPDATE, SET column_name=something WHERE x=y and more complex requests
    
    Parameters
    ----------
    TABLE : AnyStr
        Name of table
    SET : Union[List, Tuple, Mapping]
        ColumnType and value to set
    WHERE : WhereType
       optional parameter for conditions
       > db: AbstractDatabase
       > ...
       > WHERE=(db['table_name']['column_name'] == 'some_value')
    OR : OrOptionsType
        Action in case if inserting has failed. Optional parameter.
        > OR='IGNORE'
    WITH : WithType
        Disabled!
    """

Examples

import sqllex as sx

db = sx.SQLite3x(path='database.db')
# db = sx.PostgreSQL(...)

db.create_table(
    'users',
    {
        'id': [sx.INTEGER],
        'name': [sx.TEXT, sx.NOT_NULL]
    }
)


id_col = db['users']['id']  # !!!!
name_col = db['users']['name']  # !!!!


db.update(
    TABLE='users',                            # table name
    SET=['username', 'Updated_name_0'],       # set username 'Updated_name_0'
    WHERE=(
            id_col == 1                       # where id == 1
    )
)


db.update(
    'users',                            # table name
    ['username', 'Updated_name_1'],     # set username 'Updated_name_1'
    id_col > 1                          # where id > 1
)


db.update(
    'users',
    SET={
        'name': 'Updated_name_1'
    },
    WHERE=(
        id_col == 1
    )
)

db.update(
    'users',
    SET={
        name_col: name_col + '__UPDATED'    # SET id column name value == old value + '__UPDATED'
    },
    WHERE=(
        id_col == 1
    )
)

db.update(
    'users',
    SET={
        id_col: id_col + 420     # SET id column new value == old value + 420
    },
    WHERE=(
        id_col == 1
    )
)

db.update(
    'users',
    SET={
        'name': 'Updated_name_id<2'
    },
    WHERE=(
        id_col < 2
    )
)

db.update(
    'users',
    SET={
        'name': 'Updated_name_!=1_and_!=2'
    },
    WHERE=(
       (id_col != 1) & (id_col !=2)
    ),
    OR=sx.IGNORE
)

db.update(
    'users',
    SET=['name', 'Updated_name_<4_or_=1'],
    WHERE=(
        (id_col < 4) | (id_col == 1)
    )
)


# OLD variants
# for WHERE
#
# WHERE=['id', 4]
#
# WHERE={
#        'id': ['!=', [1,2]]
#       }
#
# WHERE={
#        'id': ['<', 2]
#      }
#
# WHERE="id>2"
#


Back to home