The second pattern of your mail (server side default) describes the use of 
the metadata argument:

my_seq = Sequence('some_seq', metadata=Base.metadata) 


It would be great to have that information in the documentation (I spent 
too much time on that problem and I hope others won't).

Le vendredi 11 mars 2016 21:06:07 UTC+1, Mike Bayer a écrit :
>
> I've created 
>
> https://bitbucket.org/zzzeek/sqlalchemy/issues/3676/defaults-sequences-assigned-to-both-python
>  
> in the hopes I can look at this at some point. 
>
>
>
> On 03/11/2016 02:44 PM, Jay Camp wrote: 
> > Thanks for the explanation. 
> > 
> > It makes sense now. To restate what you said this won't work because 
> > `id_sequence` isn't attached to the metadata: 
> > 
> > id_sequence  = Sequence('drop_seq_col') 
> > 
> > col = 
> Column(Integer,unique=True,nullable=False,server_default=id_sequence.next_value())
>  
>
> > 
> > 
> > I assume by making the sequence the Python default to `col` I implicitly 
> > attached it to the metadata as a convenient side-effect. But having the 
> > Python + server_default hits the edge case. But you're right, all I 
> > really want is the server_default and attach sequence to metadata. 
> > 
> > 
> > Thanks a bunch! 
> > 
> > 
> > Jay 
> > 
> > 
> > 
> > 
> > On Thursday, March 10, 2016 at 6:52:12 PM UTC-8, Jay Camp wrote: 
> > 
> >     Postgres: 9.4 
> >     SQLAlchemy: 1.0.11 
> > 
> >     When a sequence is created against a column, calling 
> >     `metadata.drop_all()` tries to drop the sequence before dropping the 
> >     table and fails because the table is still referencing the sequence. 
> >     Manually dropping the table then dropping the sequence works. 
> > 
> >     The test script is attached. Here is the console output: 
> > 
> >     2016-03-10 18:44:27,101 INFO sqlalchemy.engine.base.Engine select 
> >     version() 
> >     2016-03-10 18:44:27,101 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,104 INFO sqlalchemy.engine.base.Engine select 
> >     current_schema() 
> >     2016-03-10 18:44:27,104 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,106 INFO sqlalchemy.engine.base.Engine SELECT 
> >     CAST('test plain returns' AS VARCHAR(60)) AS anon_1 
> >     2016-03-10 18:44:27,106 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,109 INFO sqlalchemy.engine.base.Engine SELECT 
> >     CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 
> >     2016-03-10 18:44:27,109 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,110 INFO sqlalchemy.engine.base.Engine show 
> >     standard_conforming_strings 
> >     2016-03-10 18:44:27,110 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,111 INFO sqlalchemy.engine.base.Engine select 
> >     relname from pg_class c join pg_namespace n on n.oid=c.relnamespace 
> >     where pg_catalog.pg_table_is_visible(c.oid) and relname=%(name)s 
> >     2016-03-10 18:44:27,112 INFO sqlalchemy.engine.base.Engine {'name': 
> >     u'drop_seq_test'} 
> >     2016-03-10 18:44:27,115 INFO sqlalchemy.engine.base.Engine SELECT 
> >     relname FROM pg_class c join pg_namespace n on n.oid=c.relnamespace 
> >     where relkind='S' and n.nspname=current_schema() and 
> relname=%(name)s 
> >     2016-03-10 18:44:27,115 INFO sqlalchemy.engine.base.Engine {'name': 
> >     u'drop_seq_col'} 
> >     2016-03-10 18:44:27,117 INFO sqlalchemy.engine.base.Engine CREATE 
> >     SEQUENCE drop_seq_col 
> >     2016-03-10 18:44:27,117 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,127 INFO sqlalchemy.engine.base.Engine COMMIT 
> >     2016-03-10 18:44:27,129 INFO sqlalchemy.engine.base.Engine 
> >     CREATE TABLE drop_seq_test ( 
> >     col INTEGER DEFAULT nextval('drop_seq_col') NOT NULL, 
> >     source_id SERIAL NOT NULL, 
> >     PRIMARY KEY (source_id), 
> >     UNIQUE (col) 
> >     ) 
> > 
> > 
> >     2016-03-10 18:44:27,129 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,147 INFO sqlalchemy.engine.base.Engine COMMIT 
> >     2016-03-10 18:44:27,148 INFO sqlalchemy.engine.base.Engine select 
> >     relname from pg_class c join pg_namespace n on n.oid=c.relnamespace 
> >     where pg_catalog.pg_table_is_visible(c.oid) and relname=%(name)s 
> >     2016-03-10 18:44:27,148 INFO sqlalchemy.engine.base.Engine {'name': 
> >     u'drop_seq_test'} 
> >     2016-03-10 18:44:27,150 INFO sqlalchemy.engine.base.Engine SELECT 
> >     relname FROM pg_class c join pg_namespace n on n.oid=c.relnamespace 
> >     where relkind='S' and n.nspname=current_schema() and 
> relname=%(name)s 
> >     2016-03-10 18:44:27,150 INFO sqlalchemy.engine.base.Engine {'name': 
> >     u'drop_seq_col'} 
> >     2016-03-10 18:44:27,151 INFO sqlalchemy.engine.base.Engine DROP 
> >     SEQUENCE drop_seq_col 
> >     2016-03-10 18:44:27,151 INFO sqlalchemy.engine.base.Engine {} 
> >     2016-03-10 18:44:27,152 INFO sqlalchemy.engine.base.Engine ROLLBACK 
> >     Traceback (most recent call last): 
> >        File "drop-sequence.py", line 17, in <module> 
> >          metadata.drop_all() 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/schema.py",
>  
>
> >     line 3722, in drop_all 
> >          tables=tables) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  
>
> >     line 1856, in _run_visitor 
> >          conn._run_visitor(visitorcallable, element, **kwargs) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  
>
> >     line 1481, in _run_visitor 
> >          **kwargs).traverse_single(element) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py",
>  
>
> >     line 121, in traverse_single 
> >          return meth(obj, **kw) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py",
>  
>
> >     line 871, in visit_metadata 
> >          table, drop_ok=True, _is_metadata_operation=True) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py",
>  
>
> >     line 121, in traverse_single 
> >          return meth(obj, **kw) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py",
>  
>
> >     line 916, in visit_table 
> >          self.traverse_single(column.default) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py",
>  
>
> >     line 121, in traverse_single 
> >          return meth(obj, **kw) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py",
>  
>
> >     line 934, in visit_sequence 
> >          self.connection.execute(DropSequence(sequence)) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  
>
> >     line 914, in execute 
> >          return meth(self, multiparams, params) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/sql/ddl.py",
>  
>
> >     line 68, in _execute_on_connection 
> >          return connection._execute_ddl(self, multiparams, params) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  
>
> >     line 968, in _execute_ddl 
> >          compiled 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  
>
> >     line 1146, in _execute_context 
> >          context) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  
>
> >     line 1341, in _handle_dbapi_exception 
> >          exc_info 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/util/compat.py",
>  
>
> >     line 200, in raise_from_cause 
> >          reraise(type(exception), exception, tb=exc_tb) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/base.py",
>  
>
> >     line 1139, in _execute_context 
> >          context) 
> >        File 
> >     
> "/Users/jay/.virtualenvs/pinto/lib/python2.7/site-packages/sqlalchemy/engine/default.py",
>  
>
> >     line 450, in do_execute 
> >          cursor.execute(statement, parameters) 
> >     sqlalchemy.exc.InternalError: (psycopg2.InternalError) cannot drop 
> >     sequence drop_seq_col because other objects depend on it 
> >     DETAIL:  default for table drop_seq_test column col depends on 
> >     sequence drop_seq_col 
> >     HINT:  Use DROP ... CASCADE to drop the dependent objects too. 
> >       [SQL: 'DROP SEQUENCE drop_seq_col'] 
> > 
> >     Is this a bug? 
> > 
> >     Thanks 
> > 
> >     Jay 
> > 
> > -- 
> > 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+...@googlegroups.com <javascript:> 
> > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:> 
> > <mailto:sqlal...@googlegroups.com <javascript:>>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
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 post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to