Expanding bindparam doesn't work
- Linguagem predominante
- Python
- Estrelas
- 1.4k
- Forks
- 170
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Descrição
The `bindparam(expanding=True)` is intended for binding the sequence which is being used within IN expression: https://docs.sqlalchemy.org/en/13/core/sqlelement.html#sqlalchemy.sql.expression.bindparam.params.expanding.
SQLAlchemy (working):
```python
from sqlalchemy import Column, Integer, bindparam, create_engine, select
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
engine = create_engine('postgresql://postgres@localhost/postgres', echo=True)
Base.metadata.create_all(engine)
bind = bindparam('ids', expanding=True)
stmt = select([User]).where(User.id.in_(bind))
engine.execute(stmt, ids=[1, 2, 3])
```
aiopg.sa (**NOT** working):
```python
import asyncio
import sqlalchemy as sa
from aiopg.sa import create_engine
metadata = sa.MetaData()
users = sa.Table('users', metadata, sa.Column('id', sa.Integer, primary_key=True))
bind = sa.bindparam('ids', expanding=True)
async def main():
async with create_engine('postgresql://postgres@localhost/postgres') as engine:
async with engine.acquire() as conn:
await conn.execute('CREATE TABLE IF NOT EXISTS users (id serial PRIMARY KEY)')
await conn.execute(users.select().where(users.c.id.in_(bind)), ids=[1, 2, 3])
asyncio.run(main())
```
Here is the traceback:
```
Traceback (most recent call last):
File "test.py", line 19, in
asyncio.run(main())
File "/home/decaz/.pyenv/versions/3.8.1/lib/python3.8/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "/home/decaz/.pyenv/versions/3.8.1/lib/python3.8/asyncio/base_events.py", line 612, in run_until_complete
return future.result()
File "test.py", line 16, in main
await conn.execute(users.select().where(users.c.id.in_(bind)), ids=[1, 2, 3])
File "/home/decaz/workspace/test/.venv/lib/python3.8/site-packages/aiopg/sa/connection.py", line 120, in _execute
await cursor.execute(str(compiled), post_processed_params[0])
File "/home/decaz/workspace/test/.venv/lib/python3.8/site-packages/aiopg/cursor.py", line 113, in execute
await self._conn._poll(waiter, timeout)
File "/home/decaz/workspace/test/.venv/lib/python3.8/site-packages/aiopg/connection.py", line 207, in _poll
await asyncio.wait_for(self._waiter, timeout, loop=self._loop)
File "/home/decaz/.pyenv/versions/3.8.1/lib/python3.8/asyncio/tasks.py", line 483, in wait_for
return fut.result()
File "/home/decaz/workspace/test/.venv/lib/python3.8/site-packages/aiopg/connection.py", line 106, in _ready
state = self._conn.poll()
psycopg2.errors.SyntaxError: syntax error at or near "["
LINE 3: WHERE users.id IN ([EXPANDING_ids])
```
Guia de contribuição
Avaliação
Esta issue ainda não foi avaliada.