【问题标题】:SQL Alchemy : cannot connect using engine.connect()SQLAlchemy:无法使用 engine.connect() 连接
【发布时间】:2020-07-10 01:29:11
【问题描述】:

我正在使用 sqlalchemy 和 pandas 连接到 db 并从 sql 表创建数据框。

这是我的代码:

port=3306
unix_socket='/var/lib/mysql/mysql.sock'

conn = "mysql://user:pwd@localhost/dbname?port=3306?unix_socket=/var/lib/mysql/mysql.sock"

_engine = create_engine(conn)
print conn
print _engine

db_conn=_engine.connect()

输出:

Traceback (most recent call last):
  File "runner_train_test.py", line 37, in <module>
    _engine.connect()
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/engine/base.                                                                                        py", line 2018, in connect
    return self._connection_cls(self, **kwargs)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/engine/base.                                                                                        py", line 72, in __init__
    if connection is not None else engine.raw_connection()
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/engine/base.                                                                                        py", line 2104, in raw_connection
    self.pool.unique_connection, _connection)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/engine/base.                                                                                        py", line 2074, in _wrap_pool_connect
    return fn()
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 318, in unique_connection
    return _ConnectionFairy._checkout(self)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 713, in _checkout
    fairy = _ConnectionRecord.checkout(pool)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 480, in checkout
    rec = pool._do_get()
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 1060, in _do_get
    self._dec_overflow()
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/util/langhel                                                                                        pers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 1057, in _do_get
    return self._create_connection()
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 323, in _create_connection
    return _ConnectionRecord(self)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 449, in __init__
    self.connection = self.__connect()
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/pool.py", li                                                                                        ne 607, in __connect
    connection = self.__pool._invoke_creator(self)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/engine/strat                                                                                        egies.py", line 97, in connect
    return dialect.connect(*cargs, **cparams)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/sqlalchemy/engine/defau                                                                                        lt.py", line 385, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/MySQLdb/__init__.py", l                                                                                        ine 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/local/anaconda2/lib/python2.7/site-packages/MySQLdb/connections.py"                                                                                        , line 193, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
TypeError: an integer is required

【问题讨论】:

  • Aaaaaaaahhhhhh 请用四个空格格式化代码!!
  • 我认为你不能使用 unixsocket 和端口。
  • @syntonym 所说的。在 DB url 中还有两个 ? 可能会丢掉一些东西。很确定它通过"3306?unix_socket=/var/lib/mysql/mysql.sock" 作为端口,这显然不是一个整数。

标签: python python-2.7 sqlalchemy


【解决方案1】:

您的连接字符串看起来错误。 sqlalchemy documentation 声明以下字符串:mysql+mysqldb://&lt;user&gt;:&lt;password&gt;@&lt;host&gt;[:&lt;port&gt;]/&lt;dbname&gt; 或谷歌云的示例:mysql+mysqldb://root@/&lt;dbname&gt;?unix_socket=/cloudsql/&lt;projectid&gt;:&lt;instancename&gt;,因此您的字符串可能应该是:

mysql://user@/dbname?unix_socket=/var/lib/mysql/mysql.sock

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 2019-08-09
    • 1970-01-01
    • 2016-07-27
    • 2017-08-18
    • 2022-09-29
    • 2018-03-01
    • 2018-08-03
    相关资源
    最近更新 更多