Dear Mike, Thank you very much for the time you put to resolve this issue. Last 2 days, I tried many times to see when I get this error. This is the procedure:
1. I created a new empty database called "Test" 2. I wrote declarative base for 3 tables 3. I used alembic autogenerate to produce migration code and then migrated to the latest version. In this stage I have 3 tables+1 alembic_version 4. I changed my base such that drop 2 existing tables and keep just one of them 5. I tried alembic autogenerate and got the error! Actually no matter my base definition is, I get the same error with alembic autogenerate unless I remove all tables from the database and build it from the scratch! Points: 1. I don't experience this error with sqlite! 2. I don't have this problem if I don't use autogenerate 3. I'm running MacOS Mojave 10.14.1 and MySQL 8.0.11 4. I'm using Python, SQLALchemy, alembic, all the latest version 5. I provide you my problematic project including base definition, alembic folder and dump of current database. 6. If you need, this is the virtual environment which I'm using: https://www.dropbox.com/s/w55iujvg0fbn16k/venv.zip?dl=0 Sorry that my virtual environment is large! I hope you can reproduce the error. Thank you again :) On Thursday, November 8, 2018 at 10:58:56 PM UTC+8, Mike Bayer wrote: > > On Thu, Nov 8, 2018 at 9:56 AM Mike Bayer <mik...@zzzcomputing.com > <javascript:>> wrote: > > > > On Thu, Nov 8, 2018 at 3:36 AM <ai.rese...@gmail.com <javascript:>> > wrote: > > > > > > Hi > > > > > > I had a problem with alembic autogenerate after updating to version > 1.0.2. I'm running MySQL 8.0.11 and Python 3.7.1 > > > No matter how my base is defined, I always get the same error. I went > through the error and found out it comes from function " > > > > Did you also update SQLAlchemy version? The check you see has to do > > with SQLAlchemy version 1.2.13. Can you confirm that using SQLAlchemy > > 1.2.12 resolves the issue? I can work towards making this check more > > defensive. Additionally let me run the tests on MySQL 8 to see if > > I'm missing something. > > no failures here, can you please provide a sample database model that > produces this error? > > > > > > > > > > > _correct_for_mysql_bug_88718(self, fkeys, connection)" in module > "base.py" with this explaination: > > > > > > # Foreign key is always in lower case (MySQL 8.0) > > > # https://bugs.mysql.com/bug.php?id=88718 > > > # issue #4344 for SQLAlchemy > > > > > > > > > This is log of error: > > > > > > INFO [alembic.runtime.migration] Context impl MySQLImpl. > > > INFO [alembic.runtime.migration] Will assume non-transactional DDL. > > > Traceback (most recent call last): > > > File "---/venv/bin/alembic", line 11, in <module> > > > load_entry_point('alembic==1.0.2', 'console_scripts', 'alembic')() > > > File "---/venv/lib/python3.7/site-packages/alembic/config.py", line > 502, in main > > > CommandLine(prog=prog).main(argv=argv) > > > File "---/venv/lib/python3.7/site-packages/alembic/config.py", line > 496, in main > > > self.run_cmd(cfg, options) > > > File "---/venv/lib/python3.7/site-packages/alembic/config.py", line > 479, in run_cmd > > > **dict((k, getattr(options, k, None)) for k in kwarg) > > > File "---/venv/lib/python3.7/site-packages/alembic/command.py", line > 176, in revision > > > script_directory.run_env() > > > File "---/venv/lib/python3.7/site-packages/alembic/script/base.py", > line 427, in run_env > > > util.load_python_file(self.dir, 'env.py') > > > File "---/venv/lib/python3.7/site-packages/alembic/util/pyfiles.py", > line 81, in load_python_file > > > module = load_module_py(module_id, path) > > > File "---/venv/lib/python3.7/site-packages/alembic/util/compat.py", > line 82, in load_module_py > > > spec.loader.exec_module(module) > > > File "<frozen importlib._bootstrap_external>", line 728, in > exec_module > > > File "<frozen importlib._bootstrap>", line 219, in > _call_with_frames_removed > > > File "alembic/env.py", line 75, in <module> > > > run_migrations_online() > > > File "alembic/env.py", line 70, in run_migrations_online > > > context.run_migrations() > > > File "<string>", line 8, in run_migrations > > > File > "---/venv/lib/python3.7/site-packages/alembic/runtime/environment.py", line > 836, in run_migrations > > > self.get_context().run_migrations(**kw) > > > File > "---/venv/lib/python3.7/site-packages/alembic/runtime/migration.py", line > 321, in run_migrations > > > for step in self._migrations_fn(heads, self): > > > File "---/venv/lib/python3.7/site-packages/alembic/command.py", line > 156, in retrieve_migrations > > > revision_context.run_autogenerate(rev, context) > > > File > "---/venv/lib/python3.7/site-packages/alembic/autogenerate/api.py", line > 415, in run_autogenerate > > > self._run_environment(rev, migration_context, True) > > > File > "---/venv/lib/python3.7/site-packages/alembic/autogenerate/api.py", line > 451, in _run_environment > > > autogen_context, migration_script) > > > File > "---/venv/lib/python3.7/site-packages/alembic/autogenerate/compare.py", > line 22, in _populate_migration_script > > > _produce_net_changes(autogen_context, upgrade_ops) > > > File > "---/venv/lib/python3.7/site-packages/alembic/autogenerate/compare.py", > line 48, in _produce_net_changes > > > autogen_context, upgrade_ops, schemas > > > File > "---/venv/lib/python3.7/site-packages/alembic/util/langhelpers.py", line > 313, in go > > > fn(*arg, **kw) > > > File > "---/venv/lib/python3.7/site-packages/alembic/autogenerate/compare.py", > line 75, in _autogen_for_tables > > > inspector, upgrade_ops, autogen_context) > > > File > "---/venv/lib/python3.7/site-packages/alembic/autogenerate/compare.py", > line 137, in _compare_tables > > > inspector.reflecttable(t, None) > > > File > "---/venv/lib/python3.7/site-packages/sqlalchemy/engine/reflection.py", > line 633, in reflecttable > > > exclude_columns, _extend_on, reflection_options) > > > File > "---/venv/lib/python3.7/site-packages/sqlalchemy/engine/reflection.py", > line 729, in _reflect_fk > > > table_name, schema, **table.dialect_kwargs) > > > File > "---/venv/lib/python3.7/site-packages/sqlalchemy/engine/reflection.py", > line 447, in get_foreign_keys > > > **kw) > > > File "<string>", line 2, in get_foreign_keys > > > File > "---/venv/lib/python3.7/site-packages/sqlalchemy/engine/reflection.py", > line 54, in cache > > > ret = fn(self, con, *args, **kw) > > > File > "---/venv/lib/python3.7/site-packages/sqlalchemy/dialects/mysql/base.py", > line 2081, in get_foreign_keys > > > self._correct_for_mysql_bug_88718(fkeys, connection) > > > File > "---/venv/lib/python3.7/site-packages/sqlalchemy/dialects/mysql/base.py", > line 2126, in _correct_for_mysql_bug_88718 > > > for col in fkey['referred_columns'] > > > File > "---/venv/lib/python3.7/site-packages/sqlalchemy/dialects/mysql/base.py", > line 2126, in <listcomp> > > > for col in fkey['referred_columns'] > > > KeyError: 'id' > > > > > > -- > > > 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+...@googlegroups.com <javascript:>. > > > To post to this group, send email to 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.
<<attachment: Sample.zip>>