Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed SQLAlchemy DDL statements #226

Merged
merged 5 commits into from
Aug 20, 2020
Merged

Fixed SQLAlchemy DDL statements #226

merged 5 commits into from
Aug 20, 2020

Conversation

Yureien
Copy link
Contributor

@Yureien Yureien commented Jul 14, 2020

DDL statements made with SQLAlchemy (such as sqlalchemy.schema.CreateTable) used to have issues such as:

Traceback (most recent call last):
  File "../database.py", line 50, in <module>
    loop.run_until_complete(prepare_tables())
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "../database.py", line 40, in prepare_tables
    resp = await engine.fetch_one(query)
  File "/home/user/Documents/Projects/Python-Projects/test/databases/databases/core.py", line 146, in fetch_one
    return await connection.fetch_one(query, values)
  File "/home/user/Documents/Projects/Python-Projects/test/databases/databases/core.py", line 244, in fetch_one
    return await self._connection.fetch_one(built_query)
  File "/home/user/Documents/Projects/Python-Projects/test/databases/databases/backends/postgres.py", line 159, in fetch_one
    query, args, result_columns = self._compile(query)
  File "/home/user/Documents/Projects/Python-Projects/test/databases/databases/backends/postgres.py", line 205, in _compile
    compiled_params = sorted(compiled.params.items())
AttributeError: 'NoneType' object has no attribute 'items'

This PR fixes the issue for postgres, aiopg, and mysql backends.

@tomchristie
Copy link
Member

Heya looks like there's a type error being reported by the test suite?... https://github.com/encode/databases/pull/226/checks?check_run_id=868682403#step:6:54

@Yureien
Copy link
Contributor Author

Yureien commented Jul 14, 2020

Heya looks like there's a type error being reported by the test suite?... https://github.com/encode/databases/pull/226/checks?check_run_id=868682403#step:6:54

This is a weird one, I'm not able to reproduce it locally... and it says there's a incompatible type in backends/sqlite.py which wasn't even modified. Does it depend on backends/mysql.py, or backends/postgres.py or backends/sqlite.py?

@Yureien
Copy link
Contributor Author

Yureien commented Jul 14, 2020

@tomchristie um I tried doing the tests on my PC and both this PR and the master branch has the same error:

databases/backends/sqlite.py:81: error: Incompatible types in assignment (expression has type "Connection", variable has type "None")

@Yureien
Copy link
Contributor Author

Yureien commented Jul 14, 2020

Seems like aiosqlite added type hinting too (omnilib/aiosqlite@bc94ad9). I can fix sqlite.py but that'd be a separate PR.

@vmarkovtsev
Copy link
Contributor

This closes #40

@vmarkovtsev
Copy link
Contributor

@fadedcoder The tests still fail, can you PTAL?

@Yureien
Copy link
Contributor Author

Yureien commented Jul 20, 2020

@vmarkovtsev hey, there was an issue in code formatting (was using autopep8 earlier). Now all the tests pass :D

Copy link
Contributor

@vmarkovtsev vmarkovtsev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things:

  1. We need the tests.
  2. Is it possible to follow the snippet in Support for DDL expressions etc. #40 (comment) so that we have to touch less code and move the responsibility higher?

@Yureien
Copy link
Contributor Author

Yureien commented Jul 20, 2020

Sure, will implement the changes soon.

@vmarkovtsev
Copy link
Contributor

@fadedcoder friendly ping

@Yureien
Copy link
Contributor Author

Yureien commented Aug 11, 2020

@vmarkovtsev Implemented the changes :)

By the way, DDLElement is a subclass of ClauseElement so we don't have to do typing.Union[ClauseElement, DDLElement] for strict typing.

Copy link
Contributor

@vmarkovtsev vmarkovtsev left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Let's give a chance to somebody else to review this (@tomchristie?). If there is no reaction within a week, I'll merge as-is.

@vmarkovtsev vmarkovtsev merged commit 4088e42 into encode:master Aug 20, 2020
vmarkovtsev added a commit to vmarkovtsev/databases that referenced this pull request Oct 19, 2020
Changelog:

- Use backend native fetch_val() implementation when available (encode#132)
- Replace psycopg2-binary with psycopg2 (encode#198) (encode#204)
- Speed up PostgresConnection fetch() and iterate() (encode#193)
- Access asyncpg Record field by key on raw query (encode#207)
- Fix type hinting for sqlite backend (encode#227)
- Allow setting min_size and max_size in postgres DSN (encode#210)
- Add option pool_recycle in postgres DSN (encode#233)
- Fix SQLAlchemy DDL statements (encode#226)
- Make fetch_val call fetch_one for type conversion (encode#246)
- Allow extra transaction options (encode#242)
- Unquote username and password in DatabaseURL (encode#248)
vmarkovtsev added a commit to vmarkovtsev/databases that referenced this pull request Oct 19, 2020
Changelog:

- Use backend native fetch_val() implementation when available (encode#132)
- Replace psycopg2-binary with psycopg2 (encode#198) (encode#204)
- Speed up PostgresConnection fetch() and iterate() (encode#193)
- Access asyncpg Record field by key on raw query (encode#207)
- Fix type hinting for sqlite backend (encode#227)
- Allow setting min_size and max_size in postgres DSN (encode#210)
- Add option pool_recycle in postgres DSN (encode#233)
- Fix SQLAlchemy DDL statements (encode#226)
- Make fetch_val call fetch_one for type conversion (encode#246)
- Allow extra transaction options (encode#242)
- Unquote username and password in DatabaseURL (encode#248)
@vmarkovtsev vmarkovtsev mentioned this pull request Oct 19, 2020
vmarkovtsev added a commit to vmarkovtsev/databases that referenced this pull request Oct 20, 2020
Changelog:

- Use backend native fetch_val() implementation when available (encode#132)
- Replace psycopg2-binary with psycopg2 (encode#198) (encode#204)
- Speed up PostgresConnection fetch() and iterate() (encode#193)
- Access asyncpg Record field by key on raw query (encode#207)
- Fix type hinting for sqlite backend (encode#227)
- Allow setting min_size and max_size in postgres DSN (encode#210)
- Add option pool_recycle in postgres DSN (encode#233)
- Fix SQLAlchemy DDL statements (encode#226)
- Make fetch_val call fetch_one for type conversion (encode#246)
- Allow extra transaction options (encode#242)
- Unquote username and password in DatabaseURL (encode#248)
vmarkovtsev added a commit to vmarkovtsev/databases that referenced this pull request Oct 20, 2020
Changelog:

- Use backend native fetch_val() implementation when available (encode#132)
- Replace psycopg2-binary with psycopg2 (encode#198) (encode#204)
- Speed up PostgresConnection fetch() and iterate() (encode#193)
- Access asyncpg Record field by key on raw query (encode#207)
- Fix type hinting for sqlite backend (encode#227)
- Allow setting min_size and max_size in postgres DSN (encode#210)
- Add option pool_recycle in postgres DSN (encode#233)
- Fix SQLAlchemy DDL statements (encode#226)
- Make fetch_val call fetch_one for type conversion (encode#246)
- Allow extra transaction options (encode#242)
- Unquote username and password in DatabaseURL (encode#248)
vmarkovtsev added a commit that referenced this pull request Oct 20, 2020
Changelog:

- Use backend native fetch_val() implementation when available (#132)
- Replace psycopg2-binary with psycopg2 (#198) (#204)
- Speed up PostgresConnection fetch() and iterate() (#193)
- Access asyncpg Record field by key on raw query (#207)
- Fix type hinting for sqlite backend (#227)
- Allow setting min_size and max_size in postgres DSN (#210)
- Add option pool_recycle in postgres DSN (#233)
- Fix SQLAlchemy DDL statements (#226)
- Make fetch_val call fetch_one for type conversion (#246)
- Allow extra transaction options (#242)
- Unquote username and password in DatabaseURL (#248)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants