【问题标题】:Python and MySQL: is there an alternative to MySQLdb?Python 和 MySQL:有没有 MySQLdb 的替代品?
【发布时间】:2009-03-24 15:04:09
【问题描述】:

是否有一个纯粹用 Python 编写的模块可以让脚本与 MySQL 数据库通信?我已经尝试过 MySQLdb 没有成功。它需要太多:GCC、zlib 和 openssl。我无权使用这些工具;即使我这样做了,我也不想浪费时间让他们一起工作。我正在寻找可以让我的工作更轻松的工具。

有人可以指出用 Python 编写的 MySQL Python 模块的方向吗?如果没有,我将不胜感激编写我自己的代码以与 MySQL 通信的提示。

谢谢,

托尼


感谢大家的回答。由于我正在使用一个小型数据库(几百条记录,主要是名称和地址),我决定使用 SQLite。我刚刚发现它。它似乎非常适合我的目的;它安装简单(大约需要两分钟),并且可以很好地与 Python 配合使用。我被 Python 2.4 困住了,所以我不能使用 sqlite3 模块,但我可以通过使用 Python 的“subprocess.Popen”函数和命令行参数与数据库进行通信。

【问题讨论】:

  • 您应该能够为您的系统找到该库的预构建版本。

标签: python mysql database


【解决方案1】:

你看过这些吗?

http://wiki.python.org/moin/MySQL

【讨论】:

    【解决方案2】:

    最近还有oursql (docs),它比 MySQLdb 和其他现有驱动程序具有各种优势——列在文档的顶部。

    【讨论】:

    • 他们列出的第一个“优势”是fud。 “真正的参数化?” MySQLdb 已经有了。
    • @jcd:我相信 MySQLdb 没有真正的参数化。检查这个:lists.mysql.com/internals/34723
    【解决方案3】:

    Oracle 实现了一个纯 python mysql 连接器,恰当地命名为mysql-connector-python。它可以通过 pip 安装并接收大量更新。

    请注意,它是 GPL 许可的,这对您的项目可能是也可能不是问题。如果您无法忍受,您也可以选择PyMySQL,它是少数几个运行良好且在 MIT 下分发的连接器之一。

    【讨论】:

    • 它好像又开始活了。
    【解决方案4】:

    我遇到的问题是我想编写适用于 Python 2 和 Python 3 的代码。我发现 pymysql 非常适合。我无需调整代码即可从 MySQLdb 切换到 pymysql

    安装

    $ pip install PyMySQL
    

    如果您没有管理员权限:

    $ pip install -u PyMySQL
    

    用法

    用法与MySQLdb相同:

    选择

    import pymysql
    import pymysql.cursors
    connection = pymysql.connect(host=mysql['host'],
                                 user=mysql['user'],
                                 passwd=mysql['passwd'],
                                 db=mysql['db'],
                                 cursorclass=pymysql.cursors.DictCursor)
    cursor = connection.cursor()
    sql = ("SELECT `id`, `formula_in_latex` FROM `wm_formula` "
           "WHERE `is_important` = 1 "
           "AND id != 1 "  # exclude trash class
           "ORDER BY `id` ASC")
    cursor.execute(sql)
    formulas = cursor.fetchall()
    

    插入

    import pymysql
    connection = pymysql.connect(host=mysql['host'],
                                 user=mysql['user'],
                                 passwd=mysql['passwd'],
                                 db=mysql['db'])
    cursor = connection.cursor()
    cursor.execute("INSERT INTO `toys` (`id`, `arrival`, `duration`) "
                   "VALUES ('1', '2014-12-01', '123');")
    connection.commit()
    

    【讨论】:

    • 同样的事情发生在我身上,我有 Archlinux,而 MySQL-python 模块需要一些 Archlinux 没有的开发库(我也不想安装它们)。这是一个单行安装,运行起来就像一个魅力。 BTW 如何在插入查询中转义字符串?
    • @astinx pymysql.escape_string 或准备好的语句(例如stackoverflow.com/a/6216651/562769
    • pymysql.org 链接已失效
    【解决方案5】:

    您可以为大多数操作系统找到 MySQLdb 及其依赖项的预构建二进制包。

    http://sourceforge.net/project/showfiles.php?group_id=22307&package_id=15775

    你在什么平台上运行?

    【讨论】:

    • 预构建的二进制包已过期。他们不提供适用于 Windows 的 Python 2.6 版本或 x64 包。
    • 该平台是共享服务器上的 HostGator 帐户。 MySQL 和 Python 2.4 是内置的,但我无法访问 GCC 等。由于数据库很小,我想也许 SQLite 是要走的路。我听说它很容易安装和使用。
    • Python 2.6 包括对 SQLite 的支持,因此这可能是一个不错的发展方向。
    • OP 说他坚持使用 python 2.4,所以预构建的二进制文件应该没问题。
    【解决方案6】:

    正如前面的回答中提到的,MySQL 连接器/Python 完全用 Python 实现了 MySQL 服务器/客户端。无需编译,只需安装。

    以下是链接:
    * https://launchpad.net/myconnpy
    * 代码:https://code.launchpad.net/myconnpy
    * 下载:https://launchpad.net/myconnpy/+download(开发截图)

    它还没有完成,但它应该足以让你继续前进。 (仅供参考,我是维护者)

    【讨论】:

      【解决方案7】:

      毫无疑问,MySQLdb 是最好的解决方案,但如果你不能使用它……

      如果您有libmysqlclient.[so|dll],您可以使用ctypes 模块直接访问它。

      【讨论】:

      • MySQLdb 有一些破坏性的限制,即使在 11 年后也是如此。
      【解决方案8】:

      据我所知,没有直接的选择。我唯一能想到的就是通过pyodbc 改用ODBC。 MySQL 站点有一个 ODBC 连接器,您可以download。但是我自己从来没有使用过这种方法,所以我不能说它的效果如何。

      【讨论】:

        猜你喜欢
        • 2011-11-13
        • 2022-10-07
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多