2016-05-24 6 views
0

Я пытаюсь обновить базу данных sqlalchemy. Он выдает ошибку на основе строки, которую я пытаюсь реализовать в запросе. Я не хочу жестко привязывать ссылку, но скорее использую переменную, поскольку я перебираю свою базу данных.Строка обновления Python 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

+0

Ну да, в вашей базе данных есть строка с 'link = 'http: //32rfckwuorlf4dlv.ca/client-check \ n'', но не строка с' link =' http://32rfckwuorlf4dlv.ca/linklist/1 -общая \ n''. – univerio

+0

Используется неверный пример ссылки .. я полагаю, что это связано с тем, как представлен \ n. – Anekdotin

ответ

1

Хорошо, причина в том, что на самом деле currentlink"u'http://32rfckwuorlf4dlv.ca/linklist/1-general\\n", не u'http://32rfckwuorlf4dlv.ca/linklist/1-general\n'.

u Предполагая, что это tuple, вы должны сделать

currentlink = u[0] 

вместо этого.

Если вы хотите, чтобы ваш пример работы (не рекомендуется, кстати, это только для целей назидания):

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

Если u является str вместо этого, вы должны выяснить, почему это str вместо от tuple.

1

две вещи

  1. кажется в описании переменной u является кортеж, так что вы можете просто использовать currentlink = u[0], чтобы получить ссылку URL.

  2. currentlink и 'http://32rfckwuorlf4dlv.ca/linklist/1-general \ п' и http://32rfckwuorlf4dlv.ca/client-check \ п в жёстко различны. И я думаю, что это причина того, что вы получаете Nonetype из базы данных.

Смежные вопросы