Skip to content

Commit d9f487a

Browse files
committed
TST: add sql tests with parameters and percents
1 parent 1003a5c commit d9f487a

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

pandas/tests/io/test_sql.py

+98
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,26 @@
199199
"mysql": "SELECT * FROM iris WHERE `Name` LIKE '%'",
200200
"postgresql": "SELECT * FROM iris WHERE \"Name\" LIKE '%'",
201201
},
202+
"read_no_parameters_with_doublepercent": {
203+
"sqlite": "SELECT 1 %% 2 as x",
204+
"mysql": "SELECT 1 %% 2 as x",
205+
"postgresql": "SELECT 1 %% 2 as x",
206+
},
207+
"read_parameters_with_percent": {
208+
"sqlite": "SELECT ? as x, 2 % 3 as y",
209+
"mysql": "SELECT %s as x, 2 % 3 as y",
210+
"postgresql": "SELECT %s as x, 2 % 3 as y",
211+
},
212+
"read_parameters_with_doublepercent": {
213+
"sqlite": "SELECT ? as x, 2 %% 3 as y",
214+
"mysql": "SELECT %s as x, 2 %% 3 as y",
215+
"postgresql": "SELECT %s as x, 2 %% 3 as y",
216+
},
217+
"read_named_parameters_with_doublepercent": {
218+
"sqlite": "SELECT :name as x, 2 %% 3 as y",
219+
"mysql": "SELECT %(name)s as x, 2 %% 3 as y",
220+
"postgresql": "SELECT %(name)s as x, 2 %% 3 as y",
221+
},
202222
"create_view": {
203223
"sqlite": """
204224
CREATE VIEW iris_view AS
@@ -435,6 +455,56 @@ def _read_sql_iris_no_parameter_with_percent(self):
435455
iris_frame = self.pandasSQL.read_query(query, params=None)
436456
self._check_iris_loaded_frame(iris_frame)
437457

458+
def _read_sql_parameter_with_percent(self):
459+
if self.flavor in {"postgresql", "mysql"}:
460+
pytest.xfail("dialect DBI does not support parameters and single % ops")
461+
query = SQL_STRINGS["read_parameters_with_percent"][self.flavor]
462+
frame = self.pandasSQL.read_query(query, params = [1])
463+
tm.assert_frame_equal(
464+
frame,
465+
DataFrame({"x": [1], "y": [2]})
466+
)
467+
468+
def _read_sql_iris_no_parameter_with_doublepercent(self):
469+
query = SQL_STRINGS["read_no_parameters_with_doublepercent"][self.flavor]
470+
frame = self.pandasSQL.read_query(query)
471+
tm.assert_frame_equal(
472+
frame,
473+
DataFrame({"x": [1]})
474+
)
475+
476+
def _read_sql_no_parameter_with_declarative_percent(self):
477+
from sqlalchemy import sql
478+
query = sql.text("SELECT 1 % 2 as x")
479+
frame = self.pandasSQL.read_query(query)
480+
tm.assert_frame_equal(
481+
frame,
482+
DataFrame({"x": [1]})
483+
)
484+
485+
@pytest.mark.xfail
486+
def _read_sql_parameter_with_doublepercent(self):
487+
if self.flavor == "sqlite":
488+
pytest.xfail("sqlite DBI does not use doublepercent syntax")
489+
490+
query = SQL_STRINGS["read_parameters_with_doublepercent"][self.flavor]
491+
frame = self.pandasSQL.read_query(query, params = [1])
492+
tm.assert_frame_equal(
493+
frame,
494+
DataFrame({"x": [1], "y": [2]})
495+
)
496+
497+
def _read_sql_named_parameter_with_doublepercent(self):
498+
if self.flavor == "sqlite":
499+
pytest.xfail("sqlite DBI does not use doublepercent syntax")
500+
501+
query = SQL_STRINGS["read_named_parameters_with_doublepercent"][self.flavor]
502+
frame = self.pandasSQL.read_query(query, params = {'name': 1})
503+
tm.assert_frame_equal(
504+
frame,
505+
DataFrame({"x": [1], "y": [2]})
506+
)
507+
438508
def _to_sql(self, method=None):
439509
self.drop_table("test_frame1")
440510

@@ -1286,6 +1356,25 @@ def test_read_sql_parameter(self):
12861356
def test_read_sql_named_parameter(self):
12871357
self._read_sql_iris_named_parameter()
12881358

1359+
def test_read_sql_no_parameter_with_percent(self):
1360+
self._read_sql_iris_no_parameter_with_percent()
1361+
1362+
@pytest.mark.xfail
1363+
def test_read_sql_no_parameter_with_doublepercent(self):
1364+
self._read_sql_iris_no_parameter_with_doublepercent()
1365+
1366+
def test_read_sql_no_parameter_with_declarative_percent(self):
1367+
self._read_sql_no_parameter_with_declarative_percent()
1368+
1369+
def test_read_sql_parameter_with_percent(self):
1370+
self._read_sql_parameter_with_percent()
1371+
1372+
def test_read_sql_parameter_with_doublepercent(self):
1373+
self._read_sql_parameter_with_doublepercent()
1374+
1375+
def test_read_sql_named_parameter_with_doublepercent(self):
1376+
self._read_sql_named_parameter_with_doublepercent()
1377+
12891378
def test_to_sql(self):
12901379
self._to_sql()
12911380

@@ -2169,6 +2258,15 @@ def test_read_sql_parameter(self):
21692258
def test_read_sql_named_parameter(self):
21702259
self._read_sql_iris_named_parameter()
21712260

2261+
def test_read_sql_parameter_with_percent(self):
2262+
self._read_sql_parameter_with_percent()
2263+
2264+
def test_read_sql_parameter_with_doublepercent(self):
2265+
self._read_sql_parameter_with_doublepercent()
2266+
2267+
def test_read_sql_named_parameter_with_doublepercent(self):
2268+
self._read_sql_named_parameter_with_doublepercent()
2269+
21722270
def test_to_sql(self):
21732271
self._to_sql()
21742272

0 commit comments

Comments
 (0)