Fix #35484 - re-allow sqlalchemy declarative system to use `%` in read_sql.
- [x] closes #35484
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

* Adds tests to cover sql cases combining parameters and `%`.
* Notably, these tests highlight two regressions in v1.1
  - `pd.read_sql("SELECT 1 %% 2", engine)` fails. See #35871.
  - `pd.read_sql(sqlalchemy.sql.text("SELECT 1 % 2"), engine)` fails. See #35484.
* Fixes second issue by modifying SqlDatabase to not use `no_parameter`, and wrapping string queries in `sql.text()` when no parameters are passed.

I was going nuts trying to keep track of all the cases, so tossed them into a table! I didn't have time to explicitly check v1.05, so would be helpful if someone could verify that column (or I may be able to loop back to it)!

| query |   v1.05 | v.1.1 | PR | issue |
| --- | --- | --- | --- | --- |
| no params, `%` | ❌ | ✅ | ✅ | #34211 (merged) |
| no params, `%%` | ✅ | ❌ | ❌ | #35871 |
| params, `%` | ❌ | ❌ | ❌ |  https://github.com/psycopg/psycopg2/issues/827 |
| params, `%%` | ✅ | ✅ | ✅ | | 
| sqla declarative, `%` | ✅ | ❌ | ✅ | #35484 |