changing the "key" of a column during reflection is not a process that's ever 
been supported before.   you would be better off using a synonym here:

from sqlalchemy.orm import Session, synonym


_AutomapBase = automap.automap_base()


class Model1(_AutomapBase):
    __tablename__ = "model1"

    id_ = synonym("id")
    tag = Column(String())




On Sat, Aug 22, 2020, at 12:14 PM, Mike Bayer wrote:
> Hi Im not able to reproduce this, though I will grant things dont seem to 
> work very well in this area, would need to know *exactly* what it is you are 
> trying to accomplish. please alter the MCVE below to reproduce your error, it 
> passes for me however does have a warning:
> 
> from sqlalchemy import Column
> from sqlalchemy import create_engine
> from sqlalchemy import Integer
> from sqlalchemy import String
> from sqlalchemy.ext import automap
> from sqlalchemy.orm import Session
> 
> 
> _AutomapBase = automap.automap_base()
> 
> 
> class Model1(_AutomapBase):
>     __tablename__ = "model1"
> 
>     id_ = Column(
>         "id", Integer, primary_key=True, autoincrement=True, key="id_"
>     )
>     tag = Column(String())
> 
> 
> e = create_engine("sqlite://", echo=True)
> with e.connect() as conn:
>     conn.execute("create table model1 (id integer primary key, tag varchar)")
> 
> _AutomapBase.metadata.reflect(bind=e, only=["model1"], extend_existing=True)
> _AutomapBase.prepare()
> 
> row = Model1(tag="tag1")
> 
> 
> s = Session(e)
> s.add(row)
> s.flush()
> 
> 
> 
> 
> On Sat, Aug 22, 2020, at 10:43 AM, Vitaly Kruglikov wrote:
>> Dear all,
>> 
>> I am using:
>> sqlalchemy==1.3.18
>> psycopg2==2.8.4
>> connection url schema: "postgresql+psycopg2://..."
>> postgres 10.x
>> 
>> 
>> My code looks like this:
>> 
>> ```
>> _AutomapBase = automap.automap_base()
>> 
>> class Model1(_AutomapBase):
>> *    *__tablename__ = 'model1"
>> 
>>     id_ = sa.Column('id', sa.Integer, primary_key=True, autoincrement=True,
>>                                    key='id_')
>>     tag = sa.Column(sa.String())
>> 
>> _AutomapBase.metadata.reflect(bind=ENGINE, only=['model1'], 
>> extend_existing=True)
>> _AutomapBase.prepare()
>> 
>> row = Model1(tag='tag1')
>> orm_session.add(attempt)
>> orm_session.flush()
>> ```
>> 
>> I get the exception `ArgumentError: Only one Column may be marked 
>> autoincrement=True, found both id and id.` when I run the following insert:
>> ```
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/orm/session.py",
>>  line 2523, in flush
>>     self._flush(objects)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/orm/session.py",
>>  line 2664, in _flush
>>     transaction.rollback(_capture_exception=True)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py",
>>  line 68, in __exit__
>>     compat.raise_(
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/util/compat.py",
>>  line 178, in raise_
>>     raise exception
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/orm/session.py",
>>  line 2624, in _flush
>>     flush_context.execute()
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py",
>>  line 422, in execute
>>     rec.execute(self)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/orm/unitofwork.py",
>>  line 586, in execute
>>     persistence.save_obj(
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py",
>>  line 239, in save_obj
>>     _emit_insert_statements(
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/orm/persistence.py",
>>  line 1135, in _emit_insert_statements
>>     result = cached_connections[connection].execute(
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/engine/base.py",
>>  line 1014, in execute
>>     return meth(self, multiparams, params)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/elements.py",
>>  line 298, in _execute_on_connection
>>     return connection._execute_clauseelement(self, multiparams, params)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/engine/base.py",
>>  line 1108, in _execute_clauseelement
>>     compiled_sql = elem.compile(
>>   File "<string>", line 1, in <lambda>
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/elements.py",
>>  line 476, in compile
>>     return self._compiler(dialect, bind=bind, **kw)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/elements.py",
>>  line 482, in _compiler
>>     return dialect.statement_compiler(dialect, self, **kw)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/compiler.py",
>>  line 590, in __init__
>>     Compiled.__init__(self, dialect, statement, **kwargs)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/compiler.py",
>>  line 319, in __init__
>>     self.string = self.process(self.statement, **compile_kwargs)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/compiler.py",
>>  line 350, in process
>>     return obj._compiler_dispatch(self, **kwargs)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/visitors.py",
>>  line 95, in _compiler_dispatch
>>     return meth(self, **kw)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/compiler.py",
>>  line 2427, in visit_insert
>>     crud_params = crud._setup_crud_params(
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/crud.py", 
>> line 64, in _setup_crud_params
>>     return _get_crud_params(compiler, stmt, **kw)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/crud.py", 
>> line 158, in _get_crud_params
>>     _scan_cols(
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/crud.py", 
>> line 346, in _scan_cols
>>     _append_param_insert_pk_returning(
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/crud.py", 
>> line 457, in _append_param_insert_pk_returning
>>     elif c is stmt.table._autoincrement_column or c.server_default is not 
>> None:
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/schema.py", 
>> line 779, in _autoincrement_column
>>     return self.primary_key._autoincrement_column
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/util/langhelpers.py",
>>  line 883, in __get__
>>     obj.__dict__[self.__name__] = result = self.fget(obj)
>>   File 
>> "/tmp/empower-wf-venv/lib/python3.8/site-packages/sqlalchemy/sql/schema.py", 
>> line 3706, in _autoincrement_column
>>     raise exc.ArgumentError(
>> sqlalchemy.exc.ArgumentError: Only one Column may be marked 
>> autoincrement=True, found both id and id.
>> ```
>> 
>> I suspect this has something to do with the combination of the explicit 
>> definition of the `id_` column and reflection, but don't know how to fix. I 
>> really need to keep the explicit `id_` descriptor and shouldn't rename it to 
>> `id` because that's a reserved python word.
>> 
>> In fact, when I check members of the Model, I see `extend_existing` added 
>> `id` even though `id_` was already defined to represent the actual column 
>> named `id`:
>> ```
>> In [7]: dir(Model1)
>> Out[7]: 
>> [
>>  'classes',
>>  'id',
>>  'id_',
>>  'prepare',
>>  ...
>> ]
>> ```
>> 
>> Please help. Many thanks in advance!
>> 

>> --
>> SQLAlchemy - 
>> The Python SQL Toolkit and Object Relational Mapper
>>  
>> http://www.sqlalchemy.org/
>>  
>> To post example code, please provide an MCVE: Minimal, Complete, and 
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
>> description.
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to sqlalchemy+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/sqlalchemy/d362d460-0013-4070-a8dd-4f8f2ef6dcc2n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/sqlalchemy/d362d460-0013-4070-a8dd-4f8f2ef6dcc2n%40googlegroups.com?utm_medium=email&utm_source=footer>.
> 
> 

> --
> SQLAlchemy - 
> The Python SQL Toolkit and Object Relational Mapper
>  
> http://www.sqlalchemy.org/
>  
> To post example code, please provide an MCVE: Minimal, Complete, and 
> Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> description.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/712ed4dc-2654-45e1-b3d0-3b1c612dc35a%40www.fastmail.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/712ed4dc-2654-45e1-b3d0-3b1c612dc35a%40www.fastmail.com?utm_medium=email&utm_source=footer>.

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/f1f7a4ed-f9e4-49b1-a2a2-957262d5d7a6%40www.fastmail.com.

Reply via email to