@@ -140,3 +140,68 @@ class Admin(User): # type: ignore[no-redef]
140
140
admin = db .session .execute (db .select (Admin )).scalar_one ()
141
141
db .session .expire (admin )
142
142
assert admin .org == "pallets"
143
+
144
+
145
+ @pytest .mark .usefixtures ("app_ctx" )
146
+ def test_session_multiple_dbs (app : Flask , model_class : t .Any ) -> None :
147
+ app .config ["SQLALCHEMY_BINDS" ] = {"db1" : "sqlite:///" }
148
+ db = SQLAlchemy (app , model_class = model_class )
149
+
150
+ if issubclass (db .Model , (sa_orm .MappedAsDataclass )):
151
+
152
+ class User (db .Model ):
153
+ id : sa_orm .Mapped [int ] = sa_orm .mapped_column (
154
+ sa .Integer , primary_key = True , init = False
155
+ )
156
+ name : sa_orm .Mapped [str ] = sa_orm .mapped_column (
157
+ sa .String (50 ), nullable = False , init = False
158
+ )
159
+
160
+ class Product (db .Model ):
161
+ __bind_key__ = "db1"
162
+ id : sa_orm .Mapped [int ] = sa_orm .mapped_column (
163
+ sa .Integer , primary_key = True , init = False
164
+ )
165
+ name : sa_orm .Mapped [str ] = sa_orm .mapped_column (
166
+ sa .String (50 ), nullable = False , init = False
167
+ )
168
+
169
+ elif issubclass (db .Model , (sa_orm .DeclarativeBase , sa_orm .DeclarativeBaseNoMeta )):
170
+
171
+ class User (db .Model ): # type: ignore[no-redef]
172
+ id : sa_orm .Mapped [int ] = sa_orm .mapped_column (sa .Integer , primary_key = True )
173
+ name : sa_orm .Mapped [str ] = sa_orm .mapped_column (
174
+ sa .String (50 ), nullable = False
175
+ )
176
+
177
+ class Product (db .Model ): # type: ignore[no-redef]
178
+ __bind_key__ = "db1"
179
+ id : sa_orm .Mapped [int ] = sa_orm .mapped_column (sa .Integer , primary_key = True )
180
+ name : sa_orm .Mapped [str ] = sa_orm .mapped_column (
181
+ sa .String (50 ), nullable = False
182
+ )
183
+
184
+ else :
185
+
186
+ class User (db .Model ): # type: ignore[no-redef]
187
+ id = sa .Column (sa .Integer , primary_key = True )
188
+ name = sa .Column (sa .String (50 ), nullable = False )
189
+
190
+ class Product (db .Model ): # type: ignore[no-redef]
191
+ __bind_key__ = "db1"
192
+ id = sa .Column (sa .Integer , primary_key = True )
193
+ name = sa .Column (sa .String (50 ), nullable = False )
194
+
195
+ db .create_all ()
196
+
197
+ db .session .execute (User .__table__ .insert (), [{"name" : "User1" }, {"name" : "User2" }])
198
+ db .session .commit ()
199
+ users = db .session .execute (db .select (User )).scalars ().all ()
200
+ assert len (users ) == 2
201
+
202
+ db .session .execute (
203
+ Product .__table__ .insert (), [{"name" : "Product1" }, {"name" : "Product2" }]
204
+ )
205
+ db .session .commit ()
206
+ products = db .session .execute (db .select (Product )).scalars ().all ()
207
+ assert len (products ) == 2
0 commit comments