【问题标题】:SQLAlchemy+pymysql Error: sqlalchemy.util.queue.EmptySQLAlchemy+pymysql 错误:sqlalchemy.util.queue.Empty
【发布时间】:2013-03-02 03:45:41
【问题描述】:

尝试使用 Eclispse 在 Ubuntu 上运行 Python3.2、SQLAlchemy0.8 和 MySQL5.2,但我不断收到以下错误。我正在使用 pymysql(实际上是 pymysql3)引擎。

模块监控

from sqlalchemy import create_engine, MetaData
from sqlalchemy.ext.declarative import declarative_base
Engine = create_engine('mysql+pymysql://user:mypass@localhost/mydb')
Base = declarative_base(Engine)
Metadata = MetaData(bind=Engine)

from sqlalchemy.orm import sessionmaker
from sqlalchemy import Table, Column, Integer
Session = sessionmaker(bind=Engine)
session = Session()

class Student(Base):
    __table__ = Table('student_name', Metadata,
    Column('id', Integer, primary_key=True),
    autoload=True)

这样,当我运行模块时,它会抛出如下所示的错误。我做错了什么?

Traceback (most recent call last):
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/pool.py", line 757, in _do_get
return self._pool.get(wait, self._timeout)
 File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/util/queue.py", line 166, in get
raise Empty
sqlalchemy.util.queue.Empty

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/lukik/workspace/upark/src/monitor.py", line 12, in <module>
class Parking(Base):
File "/home/lukik/workspace/upark/src/monitor.py", line 15, in Parking
autoload=True)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/schema.py", line 333, in __new__
table._init(name, metadata, *args, **kw)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/schema.py", line 397, in _init
self._autoload(metadata, autoload_with, include_columns)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/schema.py", line 425, in _autoload
self, include_columns, exclude_columns
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/base.py", line 1604, in run_callable
with self.contextual_connect() as conn:
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/base.py", line 1671, in contextual_connect
self.pool.connect(),
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/pool.py", line 272, in connect
return _ConnectionFairy(self).checkout()
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/pool.py", line 425, in __init__
rec = self._connection_record = pool._do_get()
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/pool.py", line 777, in _do_get
con = self._create_connection()
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/pool.py", line 225, in _create_connection
return _ConnectionRecord(self)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/pool.py", line 322, in __init__
exec_once(self.connection, self)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/event.py", line 381, in exec_once
self(*args, **kw)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/event.py", line 398, in __call__
fn(*args, **kw)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/strategies.py", line 168, in first_connect
dialect.initialize(c)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/dialects/mysql/base.py", line 2052, in initialize
default.DefaultDialect.initialize(self, connection)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/default.py", line 172, in initialize
self._get_default_schema_name(connection)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/dialects/mysql/base.py", line 2019, in _get_default_schema_name
return connection.execute('SELECT DATABASE()').scalar()
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/base.py", line 664, in execute
params)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/base.py", line 808, in _execute_text
statement, parameters
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/base.py", line 871, in _execute_context
context)
File "/usr/local/lib/python3.2/dist-packages/SQLAlchemy-0.8.0b2-py3.2.egg/sqlalchemy/engine/default.py", line 322, in do_execute
cursor.execute(statement, parameters)
File "/usr/local/lib/python3.2/dist-packages/pymysql/cursors.py", line 105, in execute
query = query % escaped_args
TypeError: unsupported operand type(s) for %: 'bytes' and 'tuple'

【问题讨论】:

    标签: python mysql sqlalchemy python-3.2


    【解决方案1】:

    mysql-connector-pythonoursql 在 py3k 下对我来说工作正常。

    如何安装?

    $ pip install mysql-connector-python
    

    用法

    Engine = create_engine('mysql+mysqlconnector://<USERNAME>:<PASSWD>@<HOSTNAME>:<PORT>/<DBNAME>')
    

    【讨论】:

    • 在 py3k 中尝试使用 mysql-connector-python 运行异步数据库查询时,我遇到了相同的“sqlalchemy.util.queue.Empty”错误。我从主线程中生成了一个单独的线程,这样用户就不必等待 真正 长的数据库操作完成,然后尝试在新线程中连接到数据库,并得到这个我的生产服务器上的错误,而它在开发中工作正常。什么给了??
    • 我认为您应该创建另一个问题,其中包含特定于您的案例的详细信息。
    【解决方案2】:

    暂时使用 py2k 或其他数据库驱动程序。这是一个已知的 SQLAlchemy 错误:2663

    【讨论】:

    • 好的。感谢您的指点。我尝试了 MySQL-python,但它以shown here on SO 失败。我读到 pymysql 与 python3x 兼容,但正如您所说,sqlalchemy 中有一个错误。现在还有什么其他驱动程序可以使用?我尝试了oursql,它有错误,有人指出LukeCarrier's Version of oursql,但我不知道如何安装它。所以我被卡住了,或者我需要迁移到 py2k,作为一个新的 python 程序员并没有那么诱人,因为我只想从最新版本起飞并从那里迁移。
    • 也总是切换到 postgresql。如果你真的想进入 Python,我们更喜欢这个数据库。
    • py2k 是指 python 2.x 吗?文档中似乎没有 py2k 这样的术语,只有 py3k 这意味着只有 3.0,而不是 3.x。
    猜你喜欢
    • 2015-12-23
    • 2017-10-31
    • 2023-01-19
    • 2018-06-23
    • 2013-01-01
    • 1970-01-01
    • 2015-04-01
    • 2017-03-18
    • 2016-04-07
    相关资源
    最近更新 更多