这几天都在弄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中的数据库和表最好不要有大小写,这样会出错,那怕你的命令是正确的,也会说找不到相应的表。不知道是不是我有地方没设置好,真让人郁闷。
[原创]Python访问PostgreSQL
-
- 帖子: 145
- 注册时间: 2006-09-20 14:36
-
- 帖子: 353
- 注册时间: 2007-04-03 9:52
- 联系:
哈哈,谢谢楼主分享
没想到unixODBC和PostgreSQL的文章在Python区,呵呵,
也是用的PostgreSQL 和 unixODBC,
下次用Python也试一下
虽然也装了MySQL 不过没怎么用,基本上没让它启动
(这个仅仅是个人喜好的问题,不是说MySQL不好)
setup 项好像有点小问题,
下面的是我的ASCII版的配置(节选)
http://www.debian-administration.org/articles/496
没想到unixODBC和PostgreSQL的文章在Python区,呵呵,
也是用的PostgreSQL 和 unixODBC,
下次用Python也试一下
虽然也装了MySQL 不过没怎么用,基本上没让它启动
(这个仅仅是个人喜好的问题,不是说MySQL不好)
setup 项好像有点小问题,
下面的是我的ASCII版的配置(节选)
具体可以参考[PostgreSQL]
Description = PostgreSQL ODBC Driver
Driver = /usr/lib/odbc/psqlodbca.so
Setup = /usr/lib/odbc/libodbcpsqlS.so
http://www.debian-administration.org/articles/496
- forrid
- 帖子: 659
- 注册时间: 2007-04-23 17:40
-
- 帖子: 961
- 注册时间: 2006-01-06 22:55
- 系统: ubuntu
- 联系:
Re:误人子弟!明明有标准DB-API 2.0驱动包pyPgSQL
ubuntu中安装python-pgsql后参考:
/usr/share/doc/python-pgsql/examples/demo1b.py
windows中应该也有此包
/usr/share/doc/python-pgsql/examples/demo1b.py
windows中应该也有此包
代码: 全选
#!/usr/bin/python
#ident "$Id: demo1b.py,v 1.2 2001/10/18 03:17:08 ballie01 Exp $"
#-----------------------------------------------------------------------+
# demo1b.py - implement the sample program #1 from the PostgreSQL libpq |
# doumentation using the PgSQL (DB-API 2.0 compliant) module|
#-----------------------------------------------------------------------+
import sys
from pyPgSQL import PgSQL
dbname = 'template1'
# Make a connection to the database and check to see if it succeeded.
try:
cnx = PgSQL.connect(database=dbname)
except PgSQL.Error, msg:
print "Connection to database '%s' failed" % dbname
print msg,
sys.exit()
# Create a Cursor object. This handles the transaction block and the
# declaration of the database cursor.
cur = cnx.cursor()
# Fetch instances of pg_database, the system catalog of databases.
try:
cur.execute("SELECT * FROM pg_database")
except PgSQL.Error, msg:
print "Select from pg_database failed\n%s" % msg,
sys.exit()
try:
res = cur.fetchall()
except StandardError, msg:
print "Fetch of all instanaces failed\n%s" % msg,
sys.exit()
# First, print out the attibute names.
fmt = ""
for i in cur.description:
sys.stdout.write('%-15s' % i[0])
fmt = fmt + '%-15s' # build up the format string for use later on.
print '\n'
# Next, print out the instances.
for i in res:
print fmt % tuple(i)
# Close the cursor
cur.close()
# Commit the transaction
cnx.commit()
# That's all folks!
del cnx, cur, res