免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4329 | 回复: 1

分享: webpy框架的todo list连接不同数据库的小例子 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-06-20 22:20:00
发表于 2013-02-06 10:38 |显示全部楼层
根据web.py官网上的todo list的例子,进行实际测试,并尝试使用不同的数据库,在这里与大家分享。


apache+wsgi主要是考虑到以后到生产环境中,使用oracle数据库是不大喜欢java,一直想用python的访存oracle数据库。

web.py学习的资料相对太少,前后折腾了20来天(工作空隙),才算上手,整个过程很艰难,一句一句注释掉,步步为营,查错,找原因。
主要就是apache+wsgi环境中,出错信息太少,找不到原因,后来热心的thinkc给出了查看apache日志的方法,查找出错原因,进度大大加快。


困扰的问题有:
  1. webpy连接远程数据库的问题,
    解决方法是增加host参数,如下:
    db = web.database(dbn='postgres', db='postgres', user='postgres', pw='123456',host="127.0.0.1")
    只是对mysql,pgsql有效,在oracle就不行。需要这样来写。
    db = web.database(dbn='oracle', db='127.0.0.1/ORCL', user='system', pw='Mz123456')

  2.oracle和pgsql数据库,字段名大小写的问题。
    一样的create table todo (id...,title...),在webpy的程序中,oracle字段名不知为什么只能用大写,
    用小写会出错,提示id或title字段找不到,必须是ID,TITLE字段。需要修改模板index.html和model.py
    在使用pgsql数据库时,又出现相反的情况。不能用大写,要小写,改回来吧。奇了怪了!

  3.字符集问题
    乱码问题一直让我很恐惧,不幸的事,它总是如影随形。
    解决办法:
    (1).加入下面三行
      import sys
      reload(sys)
      sys.setdefaultencoding('utf-8')
    这三条,按网友的提示,解决编码转换的问题。

    (2).在base.html模板文件中,加入
     <META http-equiv=Content-Type content="text/html; charset=utf-8">
    指令页面编码

    (3).但oracle数据库中读出的记录仍然是一个?号,是乱码,根据以前写mod_python的经验,加入两条,
       import os
       os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'

   4.杂七杂八的路径问题
      python code.py  http://127.0.0.1:8080 正常,
      到了apache+wsgi中,出现文件,模块找不到的问题。
      添加下面一行,解决
      sys.path.append('D:/wwwroot/webpy')


    python code.py 启动web服务,http://127.0.0.1:8080  中,可以显示出错的信息。

    apache+wsgi环境中,浏览器中,则出错的信息太少,查错需要打开error.log日志。  

web.py官网给出了很多例子,非常好,但实际一试,才会发现,并不是拿来就可以用,需要读懂程序,需要有查错的本事。
走过了艰难的一段过程,希望后来的朋友少走弯路,在这里与大家分享一点小经验,祝大家新年快乐。

   



文件列表:

    ware\cx_Oracle-5.1.2-10g.win32-py2.7.msi   
        \cx_Oracle-5.1.2-11g.win32-py2.7.msi
        \mod_wsgi-win32-ap22py27-3.3.so
        \psycopg2-2.4.5.win32-py2.7-pg9.1.3-release

    两个todo list的例子:
    webpy-todolist-oracle.zip
    webpy-todolist-pgsql.zip


python 选择的是2.7.2版
cx_Oracle提供了两个,一个是针对oracle 10g,一个针对的11g。
psycopg2与之配对的是postgresql数据库,9.1以上版本。python 2.7版。


Apache2.2和Postgresql 9.2自己下载安装。

安装好cx_Oracle以后,还需要下载安装instantclient-basic。
Linux环境可以下载rpm包进行安装。
windows环境解压后,复制到C:\Python27\Lib\site-packages即可。



关于webpy应用的使用环境:

   比如,在windows环境下,d:\wwwroot\webpy作为根目录。

   可以用命令行 cmd, 然后切换到d盘,用cd命令进入到webpy目录。

   然后python code.py

   通常 http://127.0.0.1:8080即可使用。


   使用apache+wsgi的话,将mod_wsgi.so(改名后)复制到apache的module目录,

然后,在httpd.conf配置文件最下面添加几行。


#以下为webpy添加的内容

LoadModule wsgi_module modules/mod_wsgi.so

WSGIScriptAlias  /            "D:/wwwroot/webpy/code.py"
Alias            /static      "D:/wwwroot/webpy/static/"
AddType          text/html    .py

<Directory "D:/wwwroot/webpy">
      Order deny,allow
      Allow from all
</Directory>

然后,重新启动apache服务,即可 http://127.0.0.1 使用。

两个例子中,有sql文件,可以用数据库终端软件运行,初始化建立todo这张表。


使用过程:
    1.安装apache
    2.python
    3.安装数据库 pgsql,oracle
    4.安装pscopg
    5.cx_Oracle
    6.instantclient-basic,
    7.安装webpy   python setup.py insall
    8.配置apache的 httpd.conf文件
    9.初始化数据库
    10.打开浏览器使用

这两个例子可以逐个试验,code.py文件位于d:\wwwroot\webpy目录中。

如果在其它目录,需要修改程序中的这一行:
  sys.path.append('D:/wwwroot/webpy')
还需要修改apache的httpd.conf配置。


再次祝大家新年快乐!

完整的例子及相关软件:
webpy-todolist-eg2.zip (1.14 MB, 下载次数: 40)

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2015-06-20 22:20:00
发表于 2013-02-06 10:42 |显示全部楼层
补充一下,上面的例子中,oracle数据库安装时候,默认编码是utf8。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP