Python: 无需MySQLdb模块访问MySQL数据库

3 投票
4 回答
4076 浏览
提问于 2025-04-15 19:35

有没有其他方法可以用Mac OS 10.5.x自带的Python版本(2.5.1)连接到MySQL数据库?我不幸的是不能在我工作的客户端机器上添加MySQLdb模块……我需要使用Leopard自带的Python版本。

4 个回答

1

如果你遇到的问题是很多人提到的msqldb模块有问题,那其实有个更简单的方法可以解决:
1. 安装mysql数据库
2. 安装pyodbc模块
3. 加载并配置odbc mysql驱动
4. 使用pyodbc进行SQL操作,这个模块非常成熟,功能也很齐全。

希望这些能帮到你。

2

你也可以看看 MySQL Connector/Python。这个工具还在开发中,但应该可以在 Python 2.5 上使用。使用它不需要安装任何 MySQL 库或其他软件。

8

为什么不安装用户版(非系统版)的MySQLdb呢?

你需要安装的文件在这里:这些链接

/usr/lib/pyshared/python2.6
/usr/lib/pyshared/python2.6/_mysql.so
/usr/share/pyshared
/usr/share/pyshared/MySQLdb
/usr/share/pyshared/MySQLdb/constants
/usr/share/pyshared/MySQLdb/constants/CLIENT.py
/usr/share/pyshared/MySQLdb/constants/REFRESH.py
/usr/share/pyshared/MySQLdb/constants/FLAG.py
/usr/share/pyshared/MySQLdb/constants/FIELD_TYPE.py
/usr/share/pyshared/MySQLdb/constants/__init__.py
/usr/share/pyshared/MySQLdb/constants/ER.py
/usr/share/pyshared/MySQLdb/constants/CR.py
/usr/share/pyshared/MySQLdb/__init__.py
/usr/share/pyshared/MySQLdb/cursors.py
/usr/share/pyshared/MySQLdb/times.py
/usr/share/pyshared/MySQLdb/connections.py
/usr/share/pyshared/MySQLdb/converters.py
/usr/share/pyshared/MySQLdb/release.py
/usr/share/pyshared/_mysql_exceptions.py

即使你不能把它安装到/usr/lib和/usr/share/pyshared目录里,你也可以把它安装到其他地方,只要这个地方在客户端的PYTHONPATH列表中。

如果因为某种原因不能安装用户版的MySQLdb,那你可以尝试以下方法,不过要提醒你:这种方式和mysqld交互非常糟糕,原因我会在下面列出:

打开终端,输入类似下面的命令:

mysql -u USER -pPASSWORD -D DATABASE -Bse "select * from table;"

-B tells mysql to run in "batch" mode
-s tells mysql to run in "silent" mode
-e tells mysql to execute the following statement

如果这个命令能成功运行,那么你可以使用Python的subprocess模块来调用mysql命令(比如上面的命令)。

例如:

import subprocess
user='xxxxxx'
password='xxxxxxxx'
database='xxxxxxxx'
cmd=['mysql', '-u', user, '-p%s'%password, '-D', database, '-Bse', "select * from table;"]
proc=subprocess.Popen(cmd,stdout=subprocess.PIPE)
retval=proc.communicate()[0]
print(retval)

如上所述,使用这种方法会损失很多东西。具体来说:

  1. retval只是一个巨大的字符串。你会失去关于字段和记录开始和结束位置的信息,
  2. 你会失去自动转换为Python数据类型的功能,
  3. 你会失去有用的错误提示。

撰写回答