[原创]Python访问PostgreSQL
发表于 : 2007-01-18 19:55
这几天都在弄Python,总算把自己要的编程平台架起来了。写下来作个记号,以后也许用得着。
系统:Linux-Ubuntu6.10
编程工具:Python2.4+wxPython2.6+Boa Constructor+UliPad
数据库:PostgreSQL
ODBC:pyodbc
Python2.4在安装好Ubuntu时已安装在内,原本想安装Python2.5,但是安装后系统还是会使用2.4的文件,也就懒得再弄,先用着2.4版。
wxPython可以让Python实现窗口界面,自己是懒人一个不怎么喜欢使用命令,懒得去记那一大堆的命令和参数,自己的程序也就不用命令行实现,界面虽然不用太华丽,最起码不用记命令、易懂。
Boa是用来架构界面,不用一行一行的写,又是一个偷懒的办法。但是它的代码编辑器却不怎么好用,看起来不怎么舒服,有的英文字会重叠在一起,也就不想用。
UliPad,国人limodou用Python写的一个编辑器,试用了下感觉很好。就用它来作代码编辑器了。
PostgreSQL,Linux下数据库的选择大多数是Mysql,我之所以选择PostgreSQL是因为感觉它比Mysql的功能较为强些,Mysql毕竟是轻量级的数据库,而自己要处理的数据也不算少。这两者我自己都没用过,所有的了解都是从网络上获得。至于怎样还是要用过才知道。
由于Linux下的资源很多,不同软件、不同版本的实现方法都不一样,初学都很多时候时间就在这里浪费。但是,适应这些,入门后,一切都会顺手多了。
wxPython、Boa Constructor、PostgreSQL这三个软件都可以用Ubuntu的“新立得”查找、安装,我不喜欢在命令状态安装。wxPython是绑定在wxWidgets中,新立得是用python-wxgtk2.6包来安装。
UliPad可以到http://wiki.woodpecker.org.cn/moin/UliPad下载。
东西都收集完成了,可是要Python访问Postgre还有得试。
当初是打算用wxPython的wxODBC类进行操作,后来发觉在Python下自己不知道怎样实现,太笨了没办法。
再从Python的官方网中找下http://www.python.org/doc/topics/database/modules,有一大堆关于数据访问的数据中间件。
试也N欠,走了不少弯路,最后选定了pyodbc+unixODBC。
由于pyodbc不能直接从源安装,只能下载源代码自己安装。不过安装很简单,解压代码后,一堆文件和目录中会有一个setup.PY文件,在终端下输入 python setup.PY install。不过,它需要unixODBC的支持,也就要安装unixODBC(包括开发包),这过在新立得中可以找到。至少,要安装下面三个包odbcinst1debian1、unixodbc、unixodbc-dev。unixodbc-bin,是一个图形界面管理程序,不喜欢命令行也就装上了。
pyodbc可在http://pyodbc.sourceforge.net下载。
成功安装后应在/usr/lib/python2.4/site-packages或相应的Python版本的site-packages目录下生成一个pyodbc.so文件。这样就可以在Python程序中使用import pyodbc导入pyodbc模块功能。
接下来是安装PostgreSQL的ODBC驱动,新立得安装odbc-postgresql。
现在,就可以对ODBC进行设置,让Python通过ODBC访问Postgre。Linux下系统的ODBC的设定值分别保存在/etc/odbc.ini和/etc/odbcinst.ini下。odbc.ini是保存DNS相关资料,odbcinst.ini保存数据库ODBC驱动资料。在这里我没有使用DNS进行链接,而是直接使用链接字符串进行链接。所以我只对ODBC驱动资料odbcinst.ini进行设置。
[PostgreSQL]
Description =PostgreSQL ODBC Driver
Driver = /usr/lib/odbc/psqlodbca.so
Driver64 = /usr/lib
Setup = /etc
Setup64 = /usr/lib
UsageCount = 1
CPTimeout =
CPReuse =
这一段就是PostgreSQL的驱动资料,刚开始我是用unixODBC的ODBCConfig生成的。
设置好后,就用Python来测试下。
import pyodbc as odbc
def OnFileOpenMenu(self, event):
self.edTxt. WriteText(unicode('正在测试iODBC链接...','utf-8'))
cons='DRIVER={PostgreSQL};SERVER=localhost;DATABASE=stock;UID=mu;PWD=yc5423'
try:
conn=odbc.connect(cons)
self.edTxt.WriteText('链接成功!')
cursor=conn.cursor()
cursor.execute("delete from transdetail")
#rows=cursor.execute("insert into transdetail values('000001','2007/1/10 09:25:00',1)")
self.edTxt.WriteText("执行SQL语句成功.")
conn.commit()
except:
self.edTxt.WriteText(unicode('\n链接出错.','utf-8')+cons)
return
上面这一段是使用BOA架构的一个菜单的鼠标单击事件,并把处理的结果在文本框中输出。我没用使用标准的print输出结果,还是因为不喜欢命令行,如果有你使用上面的代码不能通过编译,请见谅。
我试了插入和删除命令都成功了。
要注意的是Postgre中的数据库和表最好不要有大小写,这样会出错,那怕你的命令是正确的,也会说找不到相应的表。不知道是不是我有地方没设置好,真让人郁闷。
系统:Linux-Ubuntu6.10
编程工具:Python2.4+wxPython2.6+Boa Constructor+UliPad
数据库:PostgreSQL
ODBC:pyodbc
Python2.4在安装好Ubuntu时已安装在内,原本想安装Python2.5,但是安装后系统还是会使用2.4的文件,也就懒得再弄,先用着2.4版。
wxPython可以让Python实现窗口界面,自己是懒人一个不怎么喜欢使用命令,懒得去记那一大堆的命令和参数,自己的程序也就不用命令行实现,界面虽然不用太华丽,最起码不用记命令、易懂。
Boa是用来架构界面,不用一行一行的写,又是一个偷懒的办法。但是它的代码编辑器却不怎么好用,看起来不怎么舒服,有的英文字会重叠在一起,也就不想用。
UliPad,国人limodou用Python写的一个编辑器,试用了下感觉很好。就用它来作代码编辑器了。
PostgreSQL,Linux下数据库的选择大多数是Mysql,我之所以选择PostgreSQL是因为感觉它比Mysql的功能较为强些,Mysql毕竟是轻量级的数据库,而自己要处理的数据也不算少。这两者我自己都没用过,所有的了解都是从网络上获得。至于怎样还是要用过才知道。
由于Linux下的资源很多,不同软件、不同版本的实现方法都不一样,初学都很多时候时间就在这里浪费。但是,适应这些,入门后,一切都会顺手多了。
wxPython、Boa Constructor、PostgreSQL这三个软件都可以用Ubuntu的“新立得”查找、安装,我不喜欢在命令状态安装。wxPython是绑定在wxWidgets中,新立得是用python-wxgtk2.6包来安装。
UliPad可以到http://wiki.woodpecker.org.cn/moin/UliPad下载。
东西都收集完成了,可是要Python访问Postgre还有得试。
当初是打算用wxPython的wxODBC类进行操作,后来发觉在Python下自己不知道怎样实现,太笨了没办法。
再从Python的官方网中找下http://www.python.org/doc/topics/database/modules,有一大堆关于数据访问的数据中间件。
试也N欠,走了不少弯路,最后选定了pyodbc+unixODBC。
由于pyodbc不能直接从源安装,只能下载源代码自己安装。不过安装很简单,解压代码后,一堆文件和目录中会有一个setup.PY文件,在终端下输入 python setup.PY install。不过,它需要unixODBC的支持,也就要安装unixODBC(包括开发包),这过在新立得中可以找到。至少,要安装下面三个包odbcinst1debian1、unixodbc、unixodbc-dev。unixodbc-bin,是一个图形界面管理程序,不喜欢命令行也就装上了。
pyodbc可在http://pyodbc.sourceforge.net下载。
成功安装后应在/usr/lib/python2.4/site-packages或相应的Python版本的site-packages目录下生成一个pyodbc.so文件。这样就可以在Python程序中使用import pyodbc导入pyodbc模块功能。
接下来是安装PostgreSQL的ODBC驱动,新立得安装odbc-postgresql。
现在,就可以对ODBC进行设置,让Python通过ODBC访问Postgre。Linux下系统的ODBC的设定值分别保存在/etc/odbc.ini和/etc/odbcinst.ini下。odbc.ini是保存DNS相关资料,odbcinst.ini保存数据库ODBC驱动资料。在这里我没有使用DNS进行链接,而是直接使用链接字符串进行链接。所以我只对ODBC驱动资料odbcinst.ini进行设置。
[PostgreSQL]
Description =PostgreSQL ODBC Driver
Driver = /usr/lib/odbc/psqlodbca.so
Driver64 = /usr/lib
Setup = /etc
Setup64 = /usr/lib
UsageCount = 1
CPTimeout =
CPReuse =
这一段就是PostgreSQL的驱动资料,刚开始我是用unixODBC的ODBCConfig生成的。
设置好后,就用Python来测试下。
import pyodbc as odbc
def OnFileOpenMenu(self, event):
self.edTxt. WriteText(unicode('正在测试iODBC链接...','utf-8'))
cons='DRIVER={PostgreSQL};SERVER=localhost;DATABASE=stock;UID=mu;PWD=yc5423'
try:
conn=odbc.connect(cons)
self.edTxt.WriteText('链接成功!')
cursor=conn.cursor()
cursor.execute("delete from transdetail")
#rows=cursor.execute("insert into transdetail values('000001','2007/1/10 09:25:00',1)")
self.edTxt.WriteText("执行SQL语句成功.")
conn.commit()
except:
self.edTxt.WriteText(unicode('\n链接出错.','utf-8')+cons)
return
上面这一段是使用BOA架构的一个菜单的鼠标单击事件,并把处理的结果在文本框中输出。我没用使用标准的print输出结果,还是因为不喜欢命令行,如果有你使用上面的代码不能通过编译,请见谅。
我试了插入和删除命令都成功了。
要注意的是Postgre中的数据库和表最好不要有大小写,这样会出错,那怕你的命令是正确的,也会说找不到相应的表。不知道是不是我有地方没设置好,真让人郁闷。