Saturday, December 1, 2012

pyodbc在mac os x上连接sqlite3的配置

pyodbc在mac os x上连接sqlite3的配置

其实python上有直接的sqlite3连接库,但是因为开发的产品还需要连接sql server需要统一采用pyodbc进行数据库交换。

在mac os x上配置odbc和linux差不多,总得来说比windows 麻烦多了。
先说说需要的东西:
1、pyodbc只是一个python库,实现了python对odbc的调用,但真正的odbc连接需要有odbc驱动进行,常见的有:unixODBC、iODBC等。因为在mac os x直接有图形界面的ODBC Administrator使用,所以我就直接安装ODBC Administrator,注意好像早期的版本是自带这个工具的,但我的系统版本是10.8的需要自己到苹果的网站上下载安装安装地址:http://support.apple.com/kb/DL895
2、sqlite3最初安装只支持最基本的程序调用不提供odbc连接,所以需要另行下载odbc的驱动,地址:http://www.ch-werner.de/sqliteodbc/ 这里有几个版本,根据自己的需要选择。因为只支持到10.7所以我使用的版本是:sqlite3-odbc-0.93.dmg

pyodbc直接使用eszy_install或者pip进行安装就行了,如果在安装过程中报
我的安装方法是:
1、安装setuptool,下载地址:http://pypi.python.org/pypi/setuptools
2、安装pip,安装方法:eszy_install pip
3、安装pyodbc,安装方法:pip install pyodbc
     我使用pip在安装pyodbc的时候碰到了一个错误:clong报的文件或目录没有找到,如果碰到这个问题是因为pip需要使用clong来进行编译而clong在早期是集成在xcode中的,但现在新版本需要自己在xcode中安装。安装方法:xode -> Preferences -> Downloads 直接安装Components中的Command line tools就行了。
4、下载安装sqlite3-odbc,直接进行安装就可以了,安装完会在/usr/lib/下生成一个libsqlite3odbc-0.93.dylib文件,这里的文件名可能因为版本有点差异。但一定好记得前缀是libsqlite3odbc,因为被参考文章1的辅导一直使用/usr/local/lib下的文件libsqlite3.dylib进行配置导致走了很多弯路。
5、下载安装ODBC Administrator,安装完后在Applications目录下打开该工具进行配置。
    配置方式:
    1)配置驱动,切换到Drivers标签下点击Add添加新驱动,Description填写驱动名称,如:sqliteodbc,Driver和Setup File都填入/usr/lib/libsqlite3odbc-0.93.dylib(文件名可能因为版本不一样有差异)。单击OK保存。
    2)  在终端下使用sqlite3 test.db创建一个库,假设路径为:/tmp/test.db
    3)  回到ODBC Administrator,在User DSN下点击添加选择第1步创建的Driver sqliteodbc,然后在DSN中输入进行odbc连接的名称,如:testdb,Description根据需要进行描述,接着点击左下角的Add按键添加一个键值对Key/Value,在Key中填入:Database,在Values中填入db文件的路径,我们这个例子是: /tmp/test.db()。点击OK保存后点击Apply。这些配置完后我们可以使用终端在~/Library/ODBC目录下看到两个文件:odbc.ini和odbcinst.ini,这两个配置文件保存的就是我们之前配置ODBC信息。

6、到这里ODBC已经算配置完成了,接下来可以进行连接验证
先为sqlite3准备数据:

$sqlite3 test.db
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .databases
seq name file
--- --------------- ----------------------------------------------------------
0 main /Users/trams/test.db
sqlite> .tables
sqlite> create table test(id int, name varchar(50));
sqlite> insert into test(id, name) values(1, 'myname');
sqlite> select * from test;
1|myname
sqlite> .mode columns
sqlite> .header on
sqlite> select * from test;
id name
---------- ----------
1 myname
sqlite>


下面使用ipython进行连接测试(ipython可通过pip进行安装:pip install ipython)
In [4]: import pyodbc
In [5]: conn = pyodbc.connect("DSN=testdb")
In [6]: cursor = conn.cursor()
In [7]: print cursor
<pyodbc.Cursor object at 0x10df0bf30>
In [8]: result = cursor.execute("select * from test")
In [9]: for i in result.fetchall():
....: print i
....:
(1, 'myname')
In [10]:


OK!看到结果了。。希望上面写的东西对大家有帮助。


参考文章:
Connecting to sqlite database via ODBC on OS X: http://www.islandjohn.com/2009/02/13/connecting-to-an-sqlite-database-via-odbc-on-os-x/
sqlite3 odbc的配置:http://www.ch-werner.de/sqliteodbc/html/index.html
Pyodbc connect to sqlite odbc: http://billyjin.kodingen.com/punbb-1.3.4/viewtopic.php?id=377

No comments:

Post a Comment