结论:
python是动态语言,解释型编程.有什么问题,就到他shell中去试验下,会有找好多问题!前面篇文章"python:logging注意事项(小心重复记录相同日志).<----removeHandler"也是这样去解决!需要dbconn.py可以到"mysql+pickle代替ZODB"文章中去下载dbconn.tar里面有类似类.
#######################编程故事开始了######################
在修改pyton下时候,发现如果把原来改为改变话,会出现些特别需求.
原描述:使用django操作数据库.
现描述:需要改为sqlalchemy操作数据库.
django使用了models.py(对象)来操作数据库.这样每个对象就就拥有了数据库field属性.在中可以直接这个属性写.而我们要求是用sqlalchemy连接数据库,但是不用sqlalchemy建表(手工建表),所以就不需要写sqlalchemy类型table语句.
有需要使用django模板渲染.其中要求models.py给出对象属性.思路方法为:adv.title.介绍下:了个对象为adv对象,这样可以从数据库中取得记录(id,title,kwd).
实现改变了.就必须也要做到这样:建个,包含特定表属性.从数据库中取出数据,并复制给这些属性.django使用才会很方便使用,才能够做到最下改变.实现NewDb.py
问题是:中有n张表,就要建立n个.这是个很费力事情.不仅仅如此,还得做测试.我想没有多少人愿意做这样重复事情.而且功能并没有得到实现.
最开始:我没有明白这个需求.以为可以如下做就可以了:
adv = DbResult( result )#
pr adv["title"]
##############################
经过我们伟大同事同意我这样做的后,我就大张旗鼓工作了!!!!!!!!!!!直奔主题写了个下午(刚开始工作不久,所以不熟悉python东西,所以请你不要笑话我哦~~)最终写了dbconn_test.py下DbResult类.
觉得很了不起,毕竟比NewDb.py简单了n倍.n = n张表.拿来给我那位伟大同事看时候,结果是:django模板的认adv.title不认adv["title"].我气死了~如果可以再活过来话,我愿意气死~~~
我明明白白和他说过;这种使用思路方法是这样adv["title"]~~还给他看过我原来例子~~
是我错,没有明白django模板渲染思路方法~难道非这样"adv.title"使用不可吗,不可以"adv["title"]"这样来渲染吗?这里留下个疑问!在我不了解模板的前就开始做了~~不好意思~公司没有那么时间让我去学习~留待以后去发觉django模板吧!先为自己挖个坑!
不爽~浪费了时间~责备是没有用~只能够说:"没有办法!还是用你写东西吧!测试我不做哦!这个测试太枯燥!"
现在想来,也是我个交流问题吧!自责也没有用,以后多多注意了哦!
#####################################################################
夜晚,在公司,我做了其他事情...
回去了,还是很不爽.毕竟时间浪费了,还没有效果出现!
第 2天,到了公司.我总是觉得如果按NewDb.py来写话,是很费力气事情.虽然这个事情,我可以不管了.但是我脾气就是这样,总想着去解决点东西.
如是做了以下事情:
>>> import dbconn
>>> db = dbconn.Db( "mysql://root:[email protected]/keyword" )
>>> rst = db.query( "select * from adv_urlqueue where flg = '0'" )
s_sql = [select * from adv_urlqueue where flg = '0']
2008-04-18 13:29:17,030 INFO sqlalchemy.engine.base.Engine.0x..90 select * from adv_urlqueue where flg = '0'
2008-04-18 13:29:17,046 INFO sqlalchemy.engine.base.Engine.0x..90 None
>>> rst.rowcount
1L
###########################################
从这里可以看到已经取出数据.
查看下rst些属性和思路方法吧
>>> dir( rst )
['AmbiguousColumn', '_ResultProxy__echo', '_ResultProxy__key_cache', '_ResultProxy__keys', '_ResultProxy__props', '____', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__module__', '____', '__reduce__', '__reduce_ex__', '__repr__', '__attr__', '__str__', '__weakref__', '_convert_key', '_fetchall_impl', '_fetchmany_impl', '_fetchone_impl', '_get_col', '_has_key', '_init_metadata', '_process_row', 'close', 'closed', 'connection', 'context', 'cursor', 'dialect', 'fetchall', 'fetchmany', 'fetchone', 'keys', 'last_inserted_ids', 'last_inserted_params', 'last_updated_params', 'lastrow_has_defaults', 'rowcount', 'scalar', 'supports_sane_rowcount']
##############################
矣?有keys这个思路方法,试试看如何用!
>>> rst.keys
Traceback (most recent call last):
File "<eractive input>", line 1, in <module>
TypeError: 'list' object is not callable
###############################
出错了!!!
>>> l = rst.keys
>>> l
['id', 'url', 'flg', 'create_time']
#########################
可以这样用!!!!
试验到了这里,如果你用过python话,应该知道只有dict类型才有keys.使用思路方法如下:
>>> mydict = { "id":1,"url":"www","flg":0,"create_time": "2008"}
>>> mydict.keys
<built-in method keys of dict object at 0x016DB810>
>>> mydict.keys
['url', 'create_time', 'id', 'flg']
奇怪了!!
############################
>>> mydict.url
Traceback (most recent call last):
File "<eractive input>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'url'
>>> mydict["url"]
'www'
###############################
rst会如何样用这个keys呢?
我就想不明白如何用这个keys!!不过,我们昨天不是需要adv.title吗?那么我就这样试试吧!
>>> rst.url
Traceback (most recent call last):
File "<eractive input>", line 1, in <module>
AttributeError: 'ResultProxy' object has no attribute 'url'
########################
出错了!
前面dir(rst)找到了个思路方法:fetchone
拿来试试!!
>>> rst.fetchone
(1L, 'www', 0L, datetime.datetime(2011, 11, 11, 11, 1))
##ok!
>>> f = rst.fetchone
>>> f.keys
<bound method RowProxy.keys of (1L, 'www', 0L, datetime.datetime(2011, 11, 11, 11, 1))>
>>> f.keys
['id', 'url', 'flg', 'create_time']
######必须你数据库中有多条数据.否则你得从新执行rst = db.query( "select * from adv_urlqueue where flg = '0'" ).
########################################
继续试验!
>>> f.url
'www'
###########################
哈哈,有结果了~~~~这就是我想要结果!
我虽然没有做什么事情,但是解决了个问题!不用写NewDb.py中n个类了!
兴奋了我好阵子!现在想想,我也确实为自己骄傲!
结论:
python是动态语言,解释型编程.有什么问题,就到他shell中去试验下,会有找好多问题!前面篇文章"python:logging注意事项(小心重复记录相同日志).<----removeHandler"也是这样去解决!
最新评论