Python sqlalchemy更新行有变量问题

时间:2016-05-24 00:53:34

标签: python sql sqlalchemy

我正在尝试更新sqlalchemy数据库。它会根据我尝试在查询中实现的字符串引发错误。我不想硬编码链接,而是使用变量,因为我循环遍历我的数据库。

print (u)
(u'http://32rfckwuorlf4dlv.ca/linklist/1-general\n',)


currentlink = (str(u)[:-3][1:])
print currentlink
u'http://32rfckwuorlf4dlv.ca/linklist/1-general\n'

这失败了..

x = Item.query.filter_by(link=currentlink).first()
            print x
            try:
                print x.id
                x.title = 'test'
            except Exception as e:
                print(str(e))

            db.session.commit()

打印:'NoneType'对象没有属性'id'

这有效..

x =  Item.query.filter_by(link=u'http://32rfckwuorlf4dlv.ca/linklist/1-general\n').first()

            print x
            try:
                print x.id
                x.title = 'test'
            except Exception as e:
                print(str(e))

            db.session.commit()

打印:http://32rfckwuorlf4dlv.ca/linklist/1-general\n'> 打印:90

2 个答案:

答案 0 :(得分:1)

两件事

  1. 您的描述中的变量u似乎是一个元组,因此您只需使用currentlink = u[0]即可获取网址链接。

  2. 硬编码中的当前链接 u'http://32rfckwuorlf4dlv.ca/linklist/1-general \ n' http://32rfckwuorlf4dlv.ca/client-check \ n 是不同的。我认为这就是你从数据库中获得Nonetype的原因。

答案 1 :(得分:1)

好的原因是currentlink实际上是"u'http://32rfckwuorlf4dlv.ca/linklist/1-general\\n",而不是u'http://32rfckwuorlf4dlv.ca/linklist/1-general\n'

假设utuple,您应该

currentlink = u[0]

代替。

如果您想让您的示例正常工作(不推荐,那么仅用于教化目的):

currentlink = str(u)[:-3][3:].replace("\\n", "\n")

如果ustr,则需要弄明白为什么它是str而不是tuple