Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Fixed SQLAlchemy DDL statements#226

Merged
vmarkovtsev merged 5 commits intoencode:masterfrom
Yureien:master
Aug 20, 2020
Merged

Fixed SQLAlchemy DDL statements#226
vmarkovtsev merged 5 commits intoencode:masterfrom
Yureien:master

Conversation

@Yureien
Copy link
Copy Markdown
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.

@lovelydinosaur
Copy link
Copy Markdown
Contributor

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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
Contributor

This closes #40

@vmarkovtsev
Copy link
Copy Markdown
Contributor

@fadedcoder The tests still fail, can you PTAL?

@Yureien
Copy link
Copy Markdown
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
Copy Markdown
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 #40 (comment) so that we have to touch less code and move the responsibility higher?

@Yureien
Copy link
Copy Markdown
Contributor Author

Yureien commented Jul 20, 2020

Sure, will implement the changes soon.

@vmarkovtsev
Copy link
Copy Markdown
Contributor

@fadedcoder friendly ping

@Yureien
Copy link
Copy Markdown
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
Copy Markdown
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 subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants