11import time
2+ from datetime import datetime
23from typing import List
34
45import boto3
56import pytest
67from pydataapi import DataAPI , Result , transaction
78from pydataapi .pydataapi import Record
8- from sqlalchemy import Column , Integer , String , create_engine
9+ from sqlalchemy import Column , DateTime , Integer , String , create_engine
910from sqlalchemy .engine import Connection
1011from sqlalchemy .ext .declarative import declarative_base
1112from sqlalchemy .orm import Query , sessionmaker
@@ -18,6 +19,7 @@ class Pets(declarative_base()):
1819 __tablename__ = 'pets'
1920 id = Column (Integer , primary_key = True , autoincrement = True )
2021 name = Column (String (255 , collation = 'utf8_unicode_ci' ), default = None )
22+ seen_at = Column (DateTime , default = None )
2123
2224
2325database : str = 'test'
@@ -56,7 +58,7 @@ def db_connection(module_scoped_container_getter) -> Connection:
5658def create_table (db_connection ) -> None :
5759 db_connection .execute ('drop table if exists pets;' )
5860 db_connection .execute (
59- 'create table pets (id int auto_increment not null primary key, name varchar(10));'
61+ 'create table pets (id int auto_increment not null primary key, name varchar(10), seen_at TIMESTAMP null );'
6062 )
6163
6264
@@ -117,32 +119,33 @@ def test_with_statement(rds_data_client, db_connection):
117119 query = Query (Pets ).filter (Pets .id == 1 )
118120 result = data_api .execute (query )
119121
120- assert list (result ) == [Record ([1 , 'dog' ], [])]
122+ assert list (result ) == [Record ([1 , 'dog' , None ], [])]
121123
122124 result = data_api .execute ('select * from pets' )
123- assert result .one ().dict () == {'id' : 1 , 'name' : 'dog' }
124-
125- insert : Insert = Insert (Pets )
126- data_api .batch_execute (
127- insert ,
128- [
129- {'id' : 2 , 'name' : 'cat' },
130- {'id' : 3 , 'name' : 'snake' },
131- {'id' : 4 , 'name' : 'rabbit' },
132- ],
133- )
134-
135- result = data_api .execute ('select * from pets' )
136- expected = [
137- Record ([1 , 'dog' ], ['id' , 'name' ]),
138- Record ([2 , 'cat' ], ['id' , 'name' ]),
139- Record ([3 , 'snake' ], ['id' , 'name' ]),
140- Record ([4 , 'rabbit' ], ['id' , 'name' ]),
141- ]
142- assert list (result ) == expected
143-
144- for row , expected_row in zip (result , expected ):
145- assert row == expected_row
125+ assert result .one ().dict () == {'id' : 1 , 'name' : 'dog' , 'seen_at' : None }
126+
127+ # This is deprecated. SQL Alchemy object will be no longer supported
128+ # insert: Insert = Insert(Pets)
129+ # data_api.batch_execute(
130+ # insert,
131+ # [
132+ # {'id': 2, 'name': 'cat', 'seen_at': None},
133+ # {'id': 3, 'name': 'snake', 'seen_at': None},
134+ # {'id': 4, 'name': 'rabbit', 'seen_at': None},
135+ # ],
136+ # )
137+ #
138+ # result = data_api.execute('select * from pets')
139+ # expected = [
140+ # Record([1, 'dog', None], ['id', 'name', 'seen_at']),
141+ # Record([2, 'cat', None], ['id', 'name', 'seen_at']),
142+ # Record([3, 'snake', None], ['id', 'name', 'seen_at']),
143+ # Record([4, 'rabbit', None], ['id', 'name', 'seen_at']),
144+ # ]
145+ # assert list(result) == expected
146+ #
147+ # for row, expected_row in zip(result, expected):
148+ # assert row == expected_row
146149
147150
148151def test_rollback (rds_data_client , db_connection ):
@@ -199,10 +202,10 @@ class OtherError(Exception):
199202 except :
200203 pass
201204 result = list (get_connection ().execute ('select * from pets' ))
202- assert result == [(2 , 'dog' )]
205+ assert result == [(2 , 'dog' , None )]
203206
204207
205- def test_dialect () -> None :
208+ def test_dialect (create_table ) -> None :
206209 rds_data_client = boto3 .client (
207210 'rds-data' ,
208211 endpoint_url = 'http://127.0.0.1:8080' ,
@@ -222,3 +225,19 @@ def test_dialect() -> None:
222225
223226 assert engine .has_table ('foo' ) is False
224227 assert engine .has_table ('pets' ) is True
228+
229+ Session = sessionmaker ()
230+ Session .configure (bind = engine )
231+ session = Session ()
232+
233+ dog = Pets (name = "dog" , seen_at = datetime (2020 , 1 , 2 , 3 , 4 , 5 , 6789 ))
234+
235+ session .add (dog )
236+ session .commit ()
237+
238+ result = list (engine .execute ('select * from pets' ))
239+ assert result [0 ] == (
240+ 1 ,
241+ 'dog' ,
242+ '2020-01-02 03:04:05' ,
243+ ) # TODO Update local-data-api to support typeHint
0 commit comments