【问题标题】:How connect to mysql with python via odbc如何通过 odbc 使用 python 连接到 mysql
【发布时间】:2011-01-12 04:29:01
【问题描述】:

我正在运行在 Fedora 14 x64 上加载的 mysql、pyodbc、python 2.7。

Odbcinst.ini 是:

# Example driver definitions

# Driver from the postgresql-odbc package
# Setup from the unixODBC package
#[PostgreSQL]
#Description    = ODBC for PostgreSQL
#Driver     = /usr/lib/psqlodbc.so
#Setup      = /usr/lib/libodbcpsqlS.so
#Driver64   = /usr/lib64/psqlodbc.so
#Setup64    = /usr/lib64/libodbcpsqlS.so
#FileUsage  = 1


# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
[MySQL]
Description = ODBC for MySQL
#Driver     = /usr/lib/libmyodbc5.so
#Setup      = /usr/lib/libodbcmyS.so
Driver64    = /usr/lib64/libmyodbc5.so
Setup64     = /usr/lib64/libodbcmyS.so
FileUsage   = 1

Odbc.ini 是:

[MySQL]
Driver = MySQL
Database = mysql
Server = localhost
Socket = /var/lib/mysql/mysql.sock
User = rooter
Password = sshh

Mysql.sock 是空的? /var/lib/mysql/mysql.sock 有 0.B

python 脚本是:

import pyodbc

#pyodbc.pooling = False 
conn = pyodbc.connect('DRIVER={MySQL};SOCKET=/var/lib/mysql/mysql.sock;UID=rooter;PWD=sshh') 

csr = conn.cursor()
csr.execute("SET GLOBAL event_scheduler = ON")
csr.close()

conn.close() 
del csr

我似乎无法连接上面的脚本,使用 isql 我得到连接!

我的错误消息:

Traceback (most recent call last):
  File "/CCX/Py/MySql Event OFF.py", line 4, in <module>
    conn = pyodbc.connect('DRIVER={MySQL};SOCKET=/var/lib/mysql/mysql.sock;UID=rooter;PWD=sshh') 
pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnectW)')

在 Win XPx64 上,

#cxn = MySQLdb.connect (host = "localhost",user="rooter",passwd ="sshh")

错误消息:

File "C:\Python26\lib\site-packages\MySQLdb\__init__.py", line 19, in <module>
    import _mysql
ImportError: DLL load failed: %1 is not a valid Win32 application.

【问题讨论】:

    标签: python mysql pyodbc unixodbc


    【解决方案1】:

    比较odbcinst.ini 和您的odbc.iniodbc.ini 中显示驱动程序的奇数值,您应该在这里有一个动态库(我认为)。

    你为什么不use direct mysql connection(没有odbc)? :

    import _mysql
    
    conn = _mysql.connect(host="localhost", user="rooter", 
                          password="sshh", db="mysql") 
    conn.query("SET GLOBAL event_scheduler = ON")
    conn.close() 
    

    (未测试)

    【讨论】:

    • 以上是直接连接缺陷。
    • 好的,我的 cxn 字符串是什么?我得到了类似的东西:cxn = pyodbc('DSN= MySQL') too work.
    • 我还想保持代码的灵活性以使用 sqlite、mysql 和 sybase。
    • 添加了一个代码示例。为了灵活性,你有一个查询,4行代码所以..
    • @RC,感谢您的帮助!我通过 ODBC 为 Win XPx64 和 Fed 14 提供了连接字符串。在 FEd 14 上,通过 MySQlDb 获得了直接连接。故障是在 XPx64 上使用 py2.6 直接连接,它已安装但不想运行。
    【解决方案2】:

    文件“C:\Python26\lib\site-packages\MySQLdb__init__.py”,第 19 行,在 导入_mysql ImportError: DLL 加载失败: %1 不是有效的 Win32 应用程序。

    如果 Python26 && windows 我们需要下载 3 个文件:libguide40.dll、libmmd.dll、libmySQL.dll 将 3 个文件放到 C:\Python26\Lib\site-packages 并将 3 个文件放到 C:\Windows\system32 然后重启你的系统

    如果 Python27 && windows 设置模块时,请注意版本 MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.4.win32-py2.7.exe 您需要 2 个版本之一

    【讨论】:

      【解决方案3】:

      来源:http://mysql-python.sourceforge.net/MySQLdb.html#some-mysql-examples

      代码测试:

      import _mysql
      
      conn=_mysql.connect(host="localhost", user="root", passwd="***", db="test")
      conn.query("select * from test_table")
      result = conn.use_result()
      
      print result.fetch_row()
      

      fetch_row() 函数有两个参数:

      1. maxrows 限制返回的最大行数。
      2. how:how=0 时返回元组,how=1 时返回字典。

      例如,result.fetch(maxrows=5, how=1) 返回一个字典数组(最大大小:5),其中键是列名,值是列值。

      【讨论】:

        猜你喜欢
        • 2021-08-11
        • 1970-01-01
        • 2019-08-23
        • 2020-10-10
        • 1970-01-01
        • 2012-09-22
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        相关资源
        最近更新 更多