- attached orm.py
sqlalchemy\dialects\mysql\base.py has a unimplemented function
when I try to run the tutorial with mysql database, I found it failed with the exception:
_mysql_exceptions.ProgrammingError: (1146, "Table 'test.user' doesn't exist")
and I identified the problem is: in the funciton has_table()
1793 except exc.DBAPIError as e: if self._extract_error_code(e.orig) == 1146: return False raise
the _extract_error_code() function is not implemented
Comments (6)
-
Account Deleted -
repo owner - changed status to wontfix
The error message you're getting means create_all() has not been called. This is in the tutorial in the bottom of the "declare a mapping" section.
As for the test case, runs fine for me:
classics-MacBook-Pro:sqlalchemy classic$ python orm.py classics-MacBook-Pro:sqlalchemy classic$
If I turn echo=True:
classics-MacBook-Pro:sqlalchemy classic$ python orm.py 2011-10-06 15:09:06,026 INFO sqlalchemy.engine.base.Engine SELECT DATABASE() 2011-10-06 15:09:06,026 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:09:06,028 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'character_set%%' 2011-10-06 15:09:06,028 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:09:06,029 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names' 2011-10-06 15:09:06,029 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:09:06,030 INFO sqlalchemy.engine.base.Engine SHOW COLLATION 2011-10-06 15:09:06,030 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:09:06,032 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode' 2011-10-06 15:09:06,032 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:09:06,033 INFO sqlalchemy.engine.base.Engine DESCRIBE `user` 2011-10-06 15:09:06,033 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:09:06,035 INFO sqlalchemy.engine.base.Engine DESCRIBE `address` 2011-10-06 15:09:06,035 INFO sqlalchemy.engine.base.Engine ()
the implementation for _extract_error_code() in this scenario is at http://hg.sqlalchemy.org/sqlalchemy/file/879c932018fd22573163c76042761ce98ccaaaa3/lib/sqlalchemy/connectors/mysqldb.py#l111.
-
repo owner sorry here's that script dropping the tables first so you can see the CREATE statements too:
classics-MacBook-Pro:sqlalchemy classic$ python orm.py 2011-10-06 15:17:51,159 INFO sqlalchemy.engine.base.Engine SELECT DATABASE() 2011-10-06 15:17:51,159 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,163 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'character_set%%' 2011-10-06 15:17:51,163 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,165 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names' 2011-10-06 15:17:51,165 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,167 INFO sqlalchemy.engine.base.Engine SHOW COLLATION 2011-10-06 15:17:51,167 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,172 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode' 2011-10-06 15:17:51,172 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,175 INFO sqlalchemy.engine.base.Engine DESCRIBE `address` 2011-10-06 15:17:51,175 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,177 INFO sqlalchemy.engine.base.Engine DESCRIBE `user` 2011-10-06 15:17:51,177 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,179 INFO sqlalchemy.engine.base.Engine DROP TABLE address 2011-10-06 15:17:51,180 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,181 INFO sqlalchemy.engine.base.Engine COMMIT 2011-10-06 15:17:51,181 INFO sqlalchemy.engine.base.Engine DROP TABLE user 2011-10-06 15:17:51,181 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,182 INFO sqlalchemy.engine.base.Engine COMMIT 2011-10-06 15:17:51,184 INFO sqlalchemy.engine.base.Engine DESCRIBE `user` 2011-10-06 15:17:51,184 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,185 INFO sqlalchemy.engine.base.Engine ROLLBACK 2011-10-06 15:17:51,185 INFO sqlalchemy.engine.base.Engine DESCRIBE `address` 2011-10-06 15:17:51,185 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,186 INFO sqlalchemy.engine.base.Engine ROLLBACK 2011-10-06 15:17:51,187 INFO sqlalchemy.engine.base.Engine CREATE TABLE user ( id INTEGER NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, PRIMARY KEY (id) ) 2011-10-06 15:17:51,187 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,188 INFO sqlalchemy.engine.base.Engine COMMIT 2011-10-06 15:17:51,188 INFO sqlalchemy.engine.base.Engine CREATE TABLE address ( id INTEGER NOT NULL AUTO_INCREMENT, user_id INTEGER NOT NULL, street VARCHAR(50), city VARCHAR(50), state CHAR(2), zip VARCHAR(15), PRIMARY KEY (id), FOREIGN KEY(user_id) REFERENCES user (id) ) 2011-10-06 15:17:51,188 INFO sqlalchemy.engine.base.Engine () 2011-10-06 15:17:51,190 INFO sqlalchemy.engine.base.Engine COMMIT
-
Account Deleted - changed status to open
- removed status
it's so strange. my platform: win7 python 3.2 sqlalchemy 0.7.2 MySQLdb 1.2.3 mysql 5.1.18
it still raise the exception. and when I use debug to dive into the http://hg.sqlalchemy.org/sqlalchemy/file/879c932018fd22573163c76042761ce98ccaaaa3/lib/sqlalchemy/connectors/mysqldb.py file's function.
find that _extract_error_code' s code has a bug on my platform.
it should be:
-112 return exception.args0 +112 return exception.errno
can you identify this problem for me? thanks. and I wonder why the _extract_error_code of base.py does't be called? return exception.errno
-
repo owner I'm not aware of a MySQLdb implementation for Python 3. Pypi does not list the package as such: http://pypi.python.org/pypi/MySQL-python/1.2.3 There is no SQLAlchemy support for MySQLdb under Python 3.
Our only somewhat working dialect for MySQL on Python 3 right now is OurSQL.
MySQLdb exceptions provide the code within .args0 - there is no .errno attribute on their exception. Here's a demonstration:
ERROR: test.engine.test_reconnect.RecycleTest.test_basic ---------------------------------------------------------------------- Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/nose/case.py", line 187, in runTest self.test(*self.arg) File "/Users/classic/dev/sqlalchemy/./test/engine/test_reconnect.py", line 400, in test_basic conn = engine.contextual_connect() File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/engine/base.py", line 2334, in contextual_connect self.pool.connect(), File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/pool.py", line 210, in connect return _ConnectionFairy(self).checkout() File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/pool.py", line 371, in __init__ rec = self._connection_record = pool._do_get() File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/pool.py", line 697, in _do_get con = self._create_connection() File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/pool.py", line 174, in _create_connection return _ConnectionRecord(self) File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/pool.py", line 256, in __init__ self.connection = self.__connect() File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/pool.py", line 316, in __connect connection = self.__pool._creator() File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/engine/strategies.py", line 93, in connect dialect.is_disconnect(e, None, None)), \ File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/dialects/mysql/base.py", line 1778, in is_disconnect return self._extract_error_code(e) in \ File "/Users/classic/dev/sqlalchemy/./lib/sqlalchemy/connectors/mysqldb.py", line 112, in _extract_error_code return exception.errno #args[0](0) AttributeError: 'OperationalError' object has no attribute 'errno' ----------------------------------------------------------------------
base.py isn't called as dialects follow a subclassing pattern where unimplemented methods of the base only serve as markers for that which the subclass must implement.
Please use the mailing list for continued support here as this is not a bug, thanks !
-
repo owner - changed milestone to 1.x.xx
- Log in to comment
the demo python file to run