11# -*- coding: utf-8 -*-
22from sqlalchemy .sql import text , select
33from sqlalchemy .sql .schema import Column , MetaData , Table
4- from sqlalchemy import Integer , String , Numeric
4+ from sqlalchemy import Integer , String , Numeric , JSON
55from sqlalchemy .orm import declarative_base , Session
66
77Base = declarative_base ()
@@ -19,6 +19,7 @@ class _TestCase02(Base):
1919 col_str = Column (String )
2020 col_num = Column (Numeric )
2121 col_nested = Column ()
22+ col_json = Column (JSON )
2223
2324class _User (Base ):
2425 __tablename__ = USER_TABLE
@@ -109,7 +110,7 @@ def test_nested_data_insert(self, engine):
109110 """
110111 INSERT INTO "%s" VALUE {
111112 'key_partition': :pk, 'key_sort': :sk,
112- 'col_str': :col1, 'col_nested': :col2
113+ 'col_str': :col1, 'col_nested': :col2, 'col_json': :col3
113114 }
114115 """
115116 % TESTCASE02_TABLE
@@ -124,13 +125,14 @@ def test_nested_data_insert(self, engine):
124125 "sk" : 0 ,
125126 "col1" : "test case nested 0" ,
126127 "col2" : nested_data ,
128+ "col3" : nested_data ,
127129 }
128130 conn .execute (text (sql_one_row_2_0_ ), params_2_0_ )
129131
130132 rows = conn .execute (
131133 text (
132134 """
133- SELECT col_nested FROM %s WHERE key_partition = :pk
135+ SELECT col_nested, col_json FROM %s WHERE key_partition = :pk
134136 AND key_sort = :sk
135137 """
136138 % TESTCASE02_TABLE
@@ -139,6 +141,7 @@ def test_nested_data_insert(self, engine):
139141 ).fetchall ()
140142 assert len (rows ) == 1
141143 assert rows [0 ][0 ] == nested_data
144+ assert rows [0 ][1 ] == nested_data
142145
143146 def test_declarative_table_insert (self , engine ):
144147 engine , conn = engine
@@ -150,6 +153,7 @@ def test_declarative_table_insert(self, engine):
150153 test_case02 .key_sort = i
151154 test_case02 .col_str = "test case declarative table " + str (i )
152155 test_case02 .col_num = i
156+ test_case02 .col_json = {"key" : "value" }
153157 session .add (test_case02 )
154158 session .commit ()
155159
@@ -176,6 +180,7 @@ def test_declarative_table_update(self, engine):
176180 ).one ()
177181 test_case .col_str = "test case declarative table 99"
178182 test_case .col_num = 99
183+ test_case .col_json = {"key" : "value updated" }
179184 session .commit ()
180185
181186 rows = conn .execute (
@@ -192,6 +197,24 @@ def test_declarative_table_update(self, engine):
192197 assert len (rows ) == 1
193198 assert rows [0 ][2 ] == "test case declarative table 99"
194199 assert rows [0 ][3 ] == 99
200+ assert rows [0 ][5 ] == '{"key": "value updated"}'
201+
202+ def test_declarative_table_select (self , engine ):
203+ engine , _ = engine
204+
205+ with Session (engine ) as session :
206+ test_case = session .scalars (
207+ select (_TestCase02 ).where (
208+ _TestCase02 .key_partition == "test_one_row_3" ,
209+ _TestCase02 .key_sort == 4 ,
210+ )
211+ ).one ()
212+ assert test_case .key_partition == "test_one_row_3"
213+ assert test_case .key_sort == 4
214+ assert test_case .col_str == "test case declarative table 4"
215+ assert test_case .col_num == 4
216+ assert test_case .col_nested is None
217+ assert test_case .col_json == {"key" : "value" }
195218
196219 def test_declarative_table_delete (self , engine ):
197220 engine , _ = engine
@@ -260,11 +283,13 @@ def test_reflect_table(self, engine):
260283 Column ("key_sort" , Integer ),
261284 Column ("col_str" , String ),
262285 Column ("col_num" , Numeric ),
286+ Column ("col_json" , JSON )
263287 )
264- assert len (table .c ) == 4
288+ assert len (table .c ) == 5
265289
266290 rows = conn .execute (table .select ()).fetchall ()
267291 assert len (rows ) == 10
292+ assert rows [7 ][4 ] == {"key" : "value updated" }
268293
269294 rows = conn .execute (
270295 table .select ().where (
0 commit comments