折腾了一天实在搞不定。。求助!Python 问题。 求大神调教。SM!

2014-07-21 16:17:41 +08:00
 O21
DBShuC = ChaX.execute("SELECT post,link,name,date from caiji")
#写入循环
for row in DBShuC:
#查询caiji表第一个标签,post
Bioti = row[0]
#查询caiji表 link标签
Lianj = row[1]
Laiy = row[2]
Shijian = row[3]
conn.close()


class index:
def GET(self):
# i = web.input(name=None)
return render.demo(
link=Lianj,
post=Bioti,
name=Laiy,
time=Shijian,
)

HTML文件

<tr>
<td><a href="{{link}}" target="_blank">{{post}}</a></td>
<td>{{name}}</td>
<td>{{time}}</td>
</tr>

现在只能显示一条信息。。。 怎么让循环跑起来。。。

官方给的文档。。。我就是绕不出来。。。 求SM
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
3997 次点击
所在节点    问与答
19 条回复
O21
2014-07-21 16:27:23 +08:00
求助。。为啥没人回复。。
O21
2014-07-21 16:31:35 +08:00
{% for user in post %}
<tr>
<td>{{ user|e }}</td>
</tr>
{% endfor %}

这样虽然可以跑起来。。。但是字符被分割了。。我好但疼 求助。。
O21
2014-07-21 16:34:30 +08:00
经过我的不懈努力。。。 已经可以输出了。。不过为什么都是同一条内容

{% for user in post %}
<tr>
<td><a href="{{link}}" target="_blank">{{post}}</a></td>
<td>{{name}}</td>
<td>{{time}}</td>
</tr>
{% endfor %}

是不是py文件的循环写的不对?
aggron
2014-07-21 16:37:12 +08:00
return render.demo(posts=DBShuC)

html

<table>
{% for post in posts %}
<tr><td>{{ post[0] }}</td><td>{{ post[1] }}</td><td>{{ post[2] }}</td></tr>
{% endfor %}
<table>

SM什么的还是算了吧,吐槽下命名
hjx1997
2014-07-21 16:38:24 +08:00
哈哈哈哈哈哈~我来冒个泡~虽然我不会Python~但是楼下一定知道、、
O21
2014-07-21 16:51:47 +08:00
@aggron 冰天雪地裸体旋转360度跪地感谢!!

其实我也想到了这样写,但是就是没想到还能这么写!!我擦!

jinja2的资料真的好少。。。

俺继续写分页了。。
O21
2014-07-21 16:56:51 +08:00
@aggron 再问下。。。刚试了。。这样写貌似不能执行 conn.close() 了。。 一关闭救出错。。 不关吧。。刷新一下就没数据了。。 好头痛
aggron
2014-07-21 17:27:24 +08:00
DBShuC = ChaX.execute("SELECT post,link,name,date from caiji")
先遍历DBShuC,保存到新的一个dict/list 中
还是换个数据库的访问模块,我猜你用的mysql
https://github.com/bdarnell/torndb, 来着原来tornado的database.py,其他数据库自己写个算了

换框架吧Django最方便了。
O21
2014-07-21 17:28:56 +08:00
@aggron 我用sqlite =,=因为比较简单。 jinja2今天才开始用。。。各种挠头。。
catcn
2014-07-21 17:31:09 +08:00
我比较喜欢写一个dbhook的装饰方法,get方法上@dbhook一下
aggron
2014-07-21 17:32:39 +08:00
@O21 可以照着https://github.com/bdarnell/torndb 写一个操作sqlite的模块,也许就需要该几行代码
:]
catcn
2014-07-21 17:40:37 +08:00
sqlite的话,直接sqlalchemy,砸代码给你:
定义: https://github.com/xiexiao/zzz/blob/master/utils.py#L154
使用方法: https://github.com/xiexiao/zzz/blob/master/handlers.py#L100
O21
2014-07-21 17:47:53 +08:00
@catcn
@aggron

我这样写了下 还是只能查询一次。然后就。。。。读不出数据

class DatabaseManager(object):
def __init__(self, db):
self.conn = sqlite3.connect(db,check_same_thread = False)
self.conn.execute('pragma foreign_keys = on')
self.conn.commit()
self.cur = self.conn.cursor()

def query(self, arg):
self.cur.execute(arg)
self.conn.commit()
return self.cur

def __del__(self):
self.conn.close()

ChaX = DatabaseManager("DB/ershou.db")
DBshuC = ChaX.query("SELECT post,link,name,date from caiji")
O21
2014-07-21 18:16:57 +08:00
算了 可能是晕了 从早上4点到现在了 去睡会 起来在想好了
Reset
2014-07-21 19:33:47 +08:00
@O21 直接把 DBShuC 放入模板里面,然后for loop 打印就可以了
catcn
2014-07-21 23:31:32 +08:00
根据你的代码,贴个装饰的dbhook给你吧:
def dbhook():
'''数据库的hook'''
def _(func):
'''_'''
def wrapper(*a, **kw):
'''wrapper'''
_handler = a[0]
db = "DB/ershou.db"
_handler.conn = sqlite3.connect(db,check_same_thread = False)
_handler.conn.execute('pragma foreign_keys = on')
_handler.conn.commit()
_handler.cur = _handler.conn.cursor()
try:
result = func(*a, **kw)
finally:
_handler.conn.close()
return result
return wrapper
return _

调用

@dbhook()
def GET(self):
DBshuC = self.cur.execute("SELECT post,link,name,date from caiji")
self.conn.commit()
catcn
2014-07-21 23:41:12 +08:00
上一条的gist地址,看下能不能帮到你: https://gist.github.com/xiexiao/5f5778a2f479fc7729c5
回复不能删除吗?
O21
2014-07-22 02:36:59 +08:00
@catcn 回复不能删除的=,= 小弟新学Python 虽然现在OK了。不过海海是想搞懂 这个@dbhook()是继承的意思吗?
catcn
2014-07-22 09:13:16 +08:00
@O21 不是,这是装饰方法,就是def dbhook():里边的func指向了@dbhook()装饰的方法
result = func(*a, **kw)这个是执行具体的方法,最后finally关闭连接。
这里没有连接池,性能未知,还是比较推荐了解一下SqlAlchemy。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/123758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX