So the first thing is, I'm assuming you are hacking in a temporary Firebird impl to even make Alembic work, because Firebird is not "out of the box" with Alembic right now.

On my end, Alembic seems to now be doing the right thing. Your example does not illustrate the model that you are starting with, in order for it to match what's in the database it needs to use the right quoting pattern.

Locally, I created two tables like this:

>>> e.execute("create table PATIENTS (id integer)")
>>> e.execute('create table "doctors" (id integer)')


so that is "patients", case *in*-sensitive, "doctors", case *sens*-itive.

Then in an env.py file I imitated these models, as well as created a FirebirdImpl:

import sqlalchemy as sa
from sqlalchemy.sql.elements import quoted_name
from alembic.ddl.impl import DefaultImpl

class FirebirdImpl(DefaultImpl):
    __dialect__ = 'firebird'

metadata = sa.MetaData()

# case insensitive name "patients"
patients = sa.Table(
    "patients", metadata, sa.Column("id", sa.Integer)
)

# case sensitive "doctors"
doctors = sa.Table(
    quoted_name("doctors", quote=True),
    metadata,
    sa.Column("id", sa.Integer)
)


Running an autogenerate, I got an empty revision file. The names all match up.





On 11/17/2016 02:51 AM, uralbash wrote:
Thank you, now there are no errors and SQLAlchemy works fine but
probably alembic do it wrong.

When I created first migration it doesn't detect qouted (case sensitive)
tables like "doctor"
(https://gist.github.com/uralbash/e83fef54003cef3111d9d4cd18145708#file-alembic-bash)

and not quoted tables added twice in migration file
(https://gist.github.com/uralbash/e83fef54003cef3111d9d4cd18145708#file-2bcdb50b589a_create_doctors_patients_appointments-py)

|
INFO  [alembic.autogenerate.compare]Detectedadded table 'PATIENTS'

INFO  [alembic.autogenerate.compare]Detectedremoved table 'patients'
|

I tested it a few times and create everything from scratch
(https://gist.github.com/uralbash/e83fef54003cef3111d9d4cd18145708#file-db_create-sql)
but always I get this wrong result

среда, 16 ноября 2016 г., 19:30:34 UTC+5 пользователь Mike Bayer написал:

    still trying to get fdb to work but looking at the source it seems like
    https://bitbucket.org/zzzeek/sqlalchemy/issues/3548
    <https://bitbucket.org/zzzeek/sqlalchemy/issues/3548> needs to be
    ported
    to firebird, as the steps taken for Oracle weren't replicated.   should
    be easy if this is the case.



    On 11/16/2016 01:31 AM, uralbash wrote:
    > Thank you, I have prepared a simple example with three tables
    > https://gist.github.com/uralbash/a623e621093a6a10fd2ea85b5a1ee124
    <https://gist.github.com/uralbash/a623e621093a6a10fd2ea85b5a1ee124>
    >
    > To avoid install FireBird in my system I use Docker + Vagrant
    >
    
https://github.com/uralbash/docker-template/blob/master/vagrant/databases/firebird/Vagrantfile
    
<https://github.com/uralbash/docker-template/blob/master/vagrant/databases/firebird/Vagrantfile>

    > and GUI client FlameRobin
    >
    > понедельник, 14 ноября 2016 г., 20:19:52 UTC+5 пользователь Mike
    Bayer
    > написал:
    >
    >
    >
    >     On 11/14/2016 01:43 AM, uralbash wrote:
    >     > I use quoted_name to describe the table schema (declarative
    >     method) in
    >     > my project like this:
    >     >
    >     > |
    >     > classPeople(Base):
    >     >     """
    >     >     .. restapi::
    >     >         :table: people
    >     >     """
    >     >     __tablename__ =quoted_name('people',quote=True)
    >     >
    >     >     id =Column(
    >     >         quoted_name("id",quote=True),
    >     >         Integer,Sequence('GEN_people_ID'),
    >     >         primary_key=True,autoincrement=True
    >     >     )
    >     >     name =Column(
    >     >         quoted_name("name",quote=True),
    >     >         Unicode
    >     >     )
    >     > |
    >     >
    >     > And it's work ok for me.
    >     > Now I want to make migration for other FireBird database
    with auto
    >     > reflect table, because it designed outside of python and
    SQLAlchemy.
    >     > I redid env.py as you suggested. At first I get all
    tablenames by raw
    >     > query and then autoload table and put it to metadata.
    >     >
    >     > |
    >     > # future
    >     > from__future__ importwith_statement
    >     >
    >     > # standard library
    >     > fromlogging.config importfileConfig
    >     >
    >     > # SQLAlchemy
    >     > importsqlalchemy
    >     > fromsqlalchemy importTable,MetaData,pool,engine_from_config
    >     > fromsqlalchemy.ext.automap importautomap_base
    >     > fromsqlalchemy.sql.elements importquoted_name
    >     > fromsqlalchemy.ext.declarative importdeclarative_base
    >     >
    >     > # third-party
    >     > fromalembic importcontext
    >     > fromalembic.ddl.impl importDefaultImpl
    >     >
    >     >
    >     > classFirebirdImpl(DefaultImpl):
    >     >     __dialect__ ='firebird'
    >     >     transactional_ddl =True
    >     >
    >     >
    >     > # this is the Alembic Config object, which provides
    >     > # access to the values within the .ini file in use.
    >     > config =context.config
    >     >
    >     > metadata =MetaData()
    >     >
    >     > engine =engine_from_config(
    >     >     config.get_section(config.config_ini_section),
    >     >     prefix='sqlalchemy.',
    >     >     poolclass=pool.NullPool)
    >     >
    >     > q =engine.execute('''
    >     > select rdb$relation_name
    >     > from rdb$relations
    >     > where rdb$view_blr is null
    >     > and (rdb$system_flag is null or rdb$system_flag = 0)
    >     > ''')
    >     > tables =[x[0].strip()forx inq.fetchall()]
    >     >
    >     > create_done =0
    >     >
    >     > while(notcreate_done):
    >     >     create_done =1
    >     >     fortable intables:
    >     >         print(table)
    >     >         iftable.isupper():
    >     >             try:
    >     >                 Table(table,metadata,autoload_with=engine)
    >     >             exceptsqlalchemy.exc.NoSuchTableErrorase:
    >     >                 create_done =0
    >     >             continue
    >     >         try:
    >     >             _table =Table(quoted_name(table,True),metadata,
    >     >                            autoload_with=engine)
    >     >         exceptsqlalchemy.exc.NoSuchTableErrorase:
    >     >             create_done =0
    >     >
    >     > print(metadata.tables)
    >     > print(metadata.tables.keys())
    >
    >
    >     the stack trace indicates it's failing when it iterates
    through the
    >     list
    >     of foreign key constraints for a table, finds one that refers
    to a
    >     table
    >     called "readers", and then the case sensitivity isn't working
    out such
    >     that it can't actually locate a table of that name.
    >
    >     if you can isolate this single pair of tables, then do a
    simple test
    >     script that's like :
    >
    >
    >     Table(<tablename>, metadata, autoload_with=engine)
    >
    >     where <tablename> is the table that has a foreign key
    reference to
    >     "readers".
    >
    >     then if you could show me the CREATE TABLE statements for
    those two
    >     tables verbatim, if I can get a firebird running somewhere I
    can try to
    >     find time to run this and look into it.
    >
    >
    >     >
    >     > # Interpret the config file for Python logging.
    >     > # This line sets up loggers basically.
    >     > fileConfig(config.config_file_name)
    >     >
    >     > # add your model's MetaData object here
    >     > # for 'autogenerate' support
    >     > # from myapp import mymodel
    >     > # target_metadata = mymodel.Base.metadata
    >     > target_metadata =metadata
    >     >
    >     > # other values from the config, defined by the needs of env.py,
    >     > # can be acquired:
    >     > # my_important_option =
    config.get_main_option("my_important_option")
    >     > # ... etc.
    >     >
    >     >
    >     > defrun_migrations_offline():
    >     >     """Run migrations in 'offline' mode.
    >     >
    >     >     This configures the context with just a URL
    >     >     and not an Engine, though an Engine is acceptable
    >     >     here as well.  By skipping the Engine creation
    >     >     we don't even need a DBAPI to be available.
    >     >
    >     >     Calls to context.execute() here emit the given string to
    the
    >     >     script output.
    >     >
    >     >     """
    >     >     url =config.get_main_option("sqlalchemy.url")
    >     >     context.configure(
    >     >         url=url,
    >     >         target_metadata=target_metadata,
    >     >         literal_binds=True
    >     >     )
    >     >
    >     >     withcontext.begin_transaction():
    >     >         context.run_migrations()
    >     >
    >     >
    >     > defrun_migrations_online():
    >     >     """Run migrations in 'online' mode.
    >     >
    >     >     In this scenario we need to create an Engine
    >     >     and associate a connection with the context.
    >     >
    >     >     """
    >     >
    >     >     withengine.connect()asconnection:
    >     >         context.configure(
    >     >             connection=connection,
    >     >             target_metadata=target_metadata
    >     >         )
    >     >
    >     >         withcontext.begin_transaction():
    >     >             context.run_migrations()
    >     >
    >     >
    >     > ifcontext.is_offline_mode():
    >     >     run_migrations_offline()
    >     > else:
    >     >     run_migrations_online()
    >     >
    >     > |
    >     >
    >     > It seems now the tables are created properly but alembic
    still raise
    >     > exception bytable names
    >     >
    >     >
    >     > |
    >     > INFO  [alembic.runtime.migration]Contextimpl FirebirdImpl.
    >     > INFO  [alembic.runtime.migration]Willassume transactional DDL.
    >     > INFO  [alembic.autogenerate.compare]Detectedadded table
    'COMPANIES'
    >     > INFO  [alembic.autogenerate.compare]Detectedadded table 'CARD'
    >     > INFO  [alembic.autogenerate.compare]Detectedadded table
    'LOCATIONS'
    >     > INFO  [alembic.autogenerate.compare]Detectedadded table 'RADIO'
    >     > Traceback(most recent call last):
    >     >
    >     >
    >
    File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/bin/alembic",line

    >
    >     > 9,in<module>
    >     >
    load_entry_point('alembic==0.8.8','console_scripts','alembic')()
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/config.py",line

    >
    >     > 479,inmain
    >     >     CommandLine(prog=prog).main(argv=argv)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/config.py",line

    >
    >     > 473,inmain
    >     >     self.run_cmd(cfg,options)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/config.py",line

    >
    >     > 456,inrun_cmd
    >     >     **dict((k,getattr(options,k))fork inkwarg)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/command.py",line

    >
    >     > 117,inrevision
    >     >     script_directory.run_env()
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/script/base.py",line

    >
    >     > 407,inrun_env
    >     >     util.load_python_file(self.dir,'env.py')
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/util/pyfiles.py",line

    >
    >     > 93,inload_python_file
    >     >     module=load_module_py(module_id,path)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/util/compat.py",line

    >
    >     > 68,inload_module_py
    >     >     module_id,path).load_module(module_id)
    >     >   File"<frozen importlib._bootstrap_external>",line
    >     > 388,in_check_name_wrapper
    >     >   File"<frozen importlib._bootstrap_external>",line
    809,inload_module
    >     >   File"<frozen importlib._bootstrap_external>",line
    668,inload_module
    >     >   File"<frozen importlib._bootstrap>",line
    268,in_load_module_shim
    >     >   File"<frozen importlib._bootstrap>",line 693,in_load
    >     >   File"<frozen importlib._bootstrap>",line 673,in_load_unlocked
    >     >   File"<frozen importlib._bootstrap_external>",line
    665,inexec_module
    >     >   File"<frozen importlib._bootstrap>",line
    >     222,in_call_with_frames_removed
    >     >   File"spgt/env.py",line 123,in<module>
    >     >     run_migrations_online()
    >     >   File"spgt/env.py",line 117,inrun_migrations_online
    >     >     context.run_migrations()
    >     >   File"<string>",line 8,inrun_migrations
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/runtime/environment.py",line

    >
    >     > 797,inrun_migrations
    >     >     self.get_context().run_migrations(**kw)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/runtime/migration.py",line

    >
    >     > 303,inrun_migrations
    >     >     forstep inself._migrations_fn(heads,self):
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/command.py",line

    >
    >     > 97,inretrieve_migrations
    >     >     revision_context.run_autogenerate(rev,context)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/autogenerate/api.py",line

    >
    >     > 369,inrun_autogenerate
    >     >     self._run_environment(rev,migration_context,True)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/autogenerate/api.py",line

    >
    >     > 405,in_run_environment
    >     >     autogen_context,migration_script)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/autogenerate/compare.py",line

    >
    >     > 22,in_populate_migration_script
    >     >     _produce_net_changes(autogen_context,upgrade_ops)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/autogenerate/compare.py",line

    >
    >     > 48,in_produce_net_changes
    >     >     autogen_context,upgrade_ops,schemas
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/util/langhelpers.py",line

    >
    >     > 314,ingo
    >     >     fn(*arg,**kw)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/autogenerate/compare.py",line

    >
    >     > 77,in_autogen_for_tables
    >     >     inspector,metadata,upgrade_ops,autogen_context)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/alembic/autogenerate/compare.py",line

    >
    >     > 138,in_compare_tables
    >     >     inspector.reflecttable(t,None)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/engine/reflection.py",line

    >
    >     > 605,inreflecttable
    >     >     exclude_columns,reflection_options)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/engine/reflection.py",line

    >
    >     > 727,in_reflect_fk
    >     >     **reflection_options
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/sql/schema.py",line

    >
    >     > 436,in__new__
    >     >     metadata._remove_table(name,schema)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py",line

    >
    >     > 60,in__exit__
    >     >     compat.reraise(exc_type,exc_value,exc_tb)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/util/compat.py",line

    >
    >     > 186,inreraise
    >     >     raisevalue
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/sql/schema.py",line

    >
    >     > 431,in__new__
    >     >     table._init(name,metadata,*args,**kw)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/sql/schema.py",line

    >
    >     > 507,in_init
    >     >     self._autoload(metadata,autoload_with,include_columns)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/sql/schema.py",line

    >
    >     > 519,in_autoload
    >     >     self,include_columns,exclude_columns
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/engine/base.py",line

    >
    >     > 1528,inrun_callable
    >     >     returncallable_(self,*args,**kwargs)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/engine/default.py",line

    >
    >     > 364,inreflecttable
    >     >
    returninsp.reflecttable(table,include_columns,exclude_columns)
    >     >
    >     >
    >
    
File"/home/uralbash/Projects/_tmp/_NotAliens/.sacrud_env/lib/python3.5/site-packages/sqlalchemy/engine/reflection.py",line

    >
    >     > 598,inreflecttable
    >     >     raiseexc.NoSuchTableError(table.name <http://table.name>
    <http://table.name>)
    >     > sqlalchemy.exc.NoSuchTableError:readers
    >     > |
    >     >
    >     >
    >     >
    >     >
    >     >
    >     > пятница, 11 ноября 2016 г., 19:48:49 UTC+5 пользователь Mike
    Bayer
    >     написал:
    >     >
    >     >     SQLAlchemy has a case sensitivity behavior that assumes
    an all
    >     >     lowercase
    >     >     name to indicate "case insensitive".  Firebird and
    Oracle both
    >     use
    >     >     ALL_UPPERCASE to indicate "case insensitive".  SQLAlchemy
    >     converts
    >     >     between these two.
    >     >
    >     >     Therefore if your table shows up in Firebird as SOME_TABLE,
    >     assuming it
    >     >     is not a *quoted* name, call upon it in SQLAlchemy as:
    >     >
    >     >     # if name is *not* quoted
    >     >     t = Table("some_table", m, autoload_with=engine)
    >     >
    >     >     if the name is truly the case-sensitive, quoted
    "SOME_TABLE",
    >     then you
    >     >     can manually pass this in as:
    >     >
    >     >     # if name *is* quoted
    >     >     from sqlalchemy.sql.elements import quoted_name
    >     >     t = Table(quoted_name("SOME_TABLE", True), m,
    >     autoload_with=engine)
    >     >
    >     >     quoted_name is at
    >     >
    >
    
http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name
    
<http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name>

    >
    
<http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name
    
<http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name>>

    >
    >     >
    >
    
<http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name
    
<http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name>

    >
    
<http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name
    
<http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=quoted#sqlalchemy.sql.elements.quoted_name>>>

    >
    >     >
    >     >
    >     > --
    >     > 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
    <http://stackoverflow.com/help/mcve>
    >     <http://stackoverflow.com/help/mcve
    <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+...@googlegroups.com <javascript:>
    >     > <mailto:sqlalchemy+unsubscr...@googlegroups.com
    <javascript:> <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
    <https://groups.google.com/group/sqlalchemy>
    >     <https://groups.google.com/group/sqlalchemy
    <https://groups.google.com/group/sqlalchemy>>.
    >     > For more options, visit https://groups.google.com/d/optout
    <https://groups.google.com/d/optout>
    >     <https://groups.google.com/d/optout
    <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
    <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+...@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
    <https://groups.google.com/group/sqlalchemy>.
    > For more options, visit https://groups.google.com/d/optout
    <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
<mailto:sqlalchemy+unsubscr...@googlegroups.com>.
To post to this group, send email to sqlalchemy@googlegroups.com
<mailto:sqlalchemy@googlegroups.com>.
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