V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
O21
V2EX  ›  问与答

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

  •  
  •   O21 · 2014-07-21 16:17:41 +08:00 · 3959 次点击
    这是一个创建于 3779 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 %}
    19 条回复    2014-07-22 09:13:16 +08:00
    O21
        1
    O21  
    OP
       2014-07-21 16:27:23 +08:00
    求助。。为啥没人回复。。
    O21
        2
    O21  
    OP
       2014-07-21 16:31:35 +08:00
    {% for user in post %}
    <tr>
    <td>{{ user|e }}</td>
    </tr>
    {% endfor %}

    这样虽然可以跑起来。。。但是字符被分割了。。我好但疼 求助。。
    O21
        3
    O21  
    OP
       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
        4
    aggron  
       2014-07-21 16:37:12 +08:00   ❤️ 1
    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
        5
    hjx1997  
       2014-07-21 16:38:24 +08:00
    哈哈哈哈哈哈~我来冒个泡~虽然我不会Python~但是楼下一定知道、、
    O21
        6
    O21  
    OP
       2014-07-21 16:51:47 +08:00
    @aggron 冰天雪地裸体旋转360度跪地感谢!!

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

    jinja2的资料真的好少。。。

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

    换框架吧Django最方便了。
    O21
        9
    O21  
    OP
       2014-07-21 17:28:56 +08:00
    @aggron 我用sqlite =,=因为比较简单。 jinja2今天才开始用。。。各种挠头。。
    catcn
        10
    catcn  
       2014-07-21 17:31:09 +08:00
    我比较喜欢写一个dbhook的装饰方法,get方法上@dbhook一下
    aggron
        11
    aggron  
       2014-07-21 17:32:39 +08:00
    @O21 可以照着https://github.com/bdarnell/torndb 写一个操作sqlite的模块,也许就需要该几行代码
    :]
    catcn
        12
    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
        13
    O21  
    OP
       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
        14
    O21  
    OP
       2014-07-21 18:16:57 +08:00 via iPhone
    算了 可能是晕了 从早上4点到现在了 去睡会 起来在想好了
    Reset
        15
    Reset  
       2014-07-21 19:33:47 +08:00
    @O21 直接把 DBShuC 放入模板里面,然后for loop 打印就可以了
    catcn
        16
    catcn  
       2014-07-21 23:31:32 +08:00   ❤️ 1
    根据你的代码,贴个装饰的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
        17
    catcn  
       2014-07-21 23:41:12 +08:00   ❤️ 1
    上一条的gist地址,看下能不能帮到你: https://gist.github.com/xiexiao/5f5778a2f479fc7729c5
    回复不能删除吗?
    O21
        18
    O21  
    OP
       2014-07-22 02:36:59 +08:00
    @catcn 回复不能删除的=,= 小弟新学Python 虽然现在OK了。不过海海是想搞懂 这个@dbhook()是继承的意思吗?
    catcn
        19
    catcn  
       2014-07-22 09:13:16 +08:00
    @O21 不是,这是装饰方法,就是def dbhook():里边的func指向了@dbhook()装饰的方法
    result = func(*a, **kw)这个是执行具体的方法,最后finally关闭连接。
    这里没有连接池,性能未知,还是比较推荐了解一下SqlAlchemy。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 96ms · UTC 05:46 · PVG 13:46 · LAX 21:46 · JFK 00:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.