Beispiel #1
0
def test_with_statement(rds_data_client, db_connection):
    with DataAPI(
            database=database,
            resource_arn=resource_arn,
            secret_arn=secret_arn,
            client=rds_data_client,
    ) as data_api:
        result = data_api.execute('INSERT INTO pets (name) VALUES (:name)',
                                  {'name': 'dog'})
        assert result.number_of_records_updated == 1

        query = 'SELECT pets.id AS pets_id, pets.name AS pets_name, pets.seen_at AS pets_seen_at FROM pets WHERE pets.id = 1'

        result = data_api.execute(query)

        assert list(result) == [Record([1, 'dog', None], [])]

        result = data_api.execute('select * from pets')
        assert result.one().dict() == {'id': 1, 'name': 'dog', 'seen_at': None}

        # This is deprecated. SQL Alchemy object will be no longer supported
        data_api.batch_execute(
            'INSERT INTO pets (id, name, seen_at) VALUES (:id, :name, :seen_at)',
            [
                {
                    'id': 2,
                    'seen_at': '2020-01-02 03:04:05.678912',
                    'name': 'cat'
                },
                {
                    'id': 3,
                    'name': 'snake',
                    'seen_at': '2020-01-02 03:04:05.678912'
                },
                {
                    'id': 4,
                    'name': 'rabbit',
                    'seen_at': '2020-01-02 03:04:05.678912'
                },
            ],
        )

        result = data_api.execute('select * from pets')
        expected = [
            Record([1, 'dog', None], ['id', 'name', 'seen_at']),
            Record([2, 'cat', '2020-01-02 03:04:05.678912'],
                   ['id', 'name', 'seen_at']),
            Record([3, 'snake', '2020-01-02 03:04:05.678912'],
                   ['id', 'name', 'seen_at']),
            Record([4, 'rabbit', '2020-01-02 03:04:05.678912'],
                   ['id', 'name', 'seen_at']),
        ]
        assert list(result) == expected

        for row, expected_row in zip(result, expected):
            assert row == expected_row
Beispiel #2
0
def test_with_statement(rds_data_client, db_connection):
    with DataAPI(
            database=database,
            resource_arn=resource_arn,
            secret_arn=secret_arn,
            client=rds_data_client,
    ) as data_api:
        insert: Insert = Insert(Pets, {'name': 'dog'})

        result = data_api.execute(insert)
        assert result.number_of_records_updated == 1

        query = Query(Pets).filter(Pets.id == 1)
        result = data_api.execute(query)

        assert list(result) == [Record([1, 'dog'], [])]

        result = data_api.execute('select * from pets')
        assert result.one().dict() == {'id': 1, 'name': 'dog'}

        insert: Insert = Insert(Pets)
        data_api.batch_execute(
            insert,
            [
                {
                    'id': 2,
                    'name': 'cat'
                },
                {
                    'id': 3,
                    'name': 'snake'
                },
                {
                    'id': 4,
                    'name': 'rabbit'
                },
            ],
        )

        result = data_api.execute('select * from pets')
        expected = [
            Record([1, 'dog'], ['id', 'name']),
            Record([2, 'cat'], ['id', 'name']),
            Record([3, 'snake'], ['id', 'name']),
            Record([4, 'rabbit'], ['id', 'name']),
        ]
        assert list(result) == expected

        for row, expected_row in zip(result, expected):
            assert row == expected_row
def test_record() -> None:
    record = Record([1, 'dog'], ['id', 'name'])
    assert str(record) == '<Record(id=1, name=dog)>'
    assert record.headers == ['id', 'name']
    assert next(record) == 1
    assert next(record) == 'dog'
    with pytest.raises(StopIteration):
        next(record)

    assert record.dict() == {'id': 1, 'name': 'dog'}

    class Pet(BaseModel):
        id: int
        name: str

    assert record.model(Pet) == Pet(id=1, name='dog')

    assert record == Record([1, 'dog'], ['id', 'name'])
    assert record == [1, 'dog']
    assert record == (1, 'dog')
    assert record != Record([2, 'cat'], ['id', 'name'])
    assert record != []
    assert record != tuple()
    assert record != ''
def test_result() -> None:
    column_metadata = [
        {
            "arrayBaseColumnType": 0,
            "isAutoIncrement": False,
            "isCaseSensitive": False,
            "isCurrency": False,
            "isSigned": True,
            "label": "id",
            "name": "id",
            "nullable": 1,
            "precision": 11,
            "scale": 0,
            "schemaName": "",
            "tableName": "pets",
            "type": 4,
            "typeName": "INT",
        },
        {
            "arrayBaseColumnType": 0,
            "isAutoIncrement": False,
            "isCaseSensitive": False,
            "isCurrency": False,
            "isSigned": False,
            "label": "name",
            "name": "name",
            "nullable": 1,
            "precision": 255,
            "scale": 0,
            "schemaName": "",
            "tableName": "pets",
            "type": 12,
            "typeName": "VARCHAR",
        },
    ]
    result = Result({
        'numberOfRecordsUpdated':
        0,
        'records': [
            [{
                'longValue': 1
            }, {
                'stringValue': 'dog'
            }],
            [{
                'longValue': 2
            }, {
                'stringValue': 'cat'
            }],
            [{
                'longValue': 3
            }, {
                'isNull': True
            }],
        ],
        "columnMetadata":
        column_metadata,
    })

    assert result[0] == [1, 'dog']
    assert result[1] == [2, 'cat']
    assert result[2] == [3, None]
    dog, cat, none = result[0:3]
    assert dog == [1, 'dog']
    assert cat == [2, 'cat']
    assert none == [3, None]
    assert next(result) == Record([1, 'dog'], ['id', 'name'])
    assert next(result) == Record([2, 'cat'], ['id', 'name'])
    assert next(result) == Record([3, None], ['id', 'name'])
    with pytest.raises(StopIteration):
        next(result)

    assert result.all() == [
        Record([1, 'dog'], ['id', 'name']),
        Record([2, 'cat'], ['id', 'name']),
        Record([3, None], ['id', 'name']),
    ]
    assert result.first() == Record([1, 'dog'], ['id', 'name'])
    with pytest.raises(MultipleResultsFound):
        result.one()

    with pytest.raises(MultipleResultsFound):
        result.one_or_none()

    result_one = Result({
        'numberOfRecordsUpdated': 0,
        'records': [[{
            'longValue': 1
        }, {
            'stringValue': 'dog'
        }]],
        "columnMetadata": column_metadata,
    })
    assert result_one.one() == Record([1, 'dog'], ['id', 'name'])
    assert result_one.one_or_none() == Record([1, 'dog'], ['id', 'name'])
    assert result_one.scalar() == 1

    result_empty = Result({
        'numberOfRecordsUpdated': 0,
        'records': [],
        "columnMetadata": column_metadata
    })
    with pytest.raises(NoResultFound):
        result_empty.one()
    assert result_empty.one_or_none() is None
    assert result_empty.first() is None