我刚刚开始学习如何将sqlalchemy与mysql结合使用,并且我正在编写一个爬网程序以在微博(Twitter的中文版)中爬网用户发布的状态进行练习。我遇到以下问题:
我已经定义了一个mysql表来存储tweets信息,包括用户名,发布时间,发布文本等...
在我的工作人员中,代码经过一个人的页面,并且针对每种状态(或推特),它尝试先将项目保存到列表中,然后再保存到mysql表中。我正在尝试通过sqlalchemy做到这一点。
代码如下:
...etc
def perform_work(self):
id, name = self.current_item
p = self.client.people(uid=id)
rows = []
try:
for status in p.statuses.page(1):
self.logger.info('{} got {}\'s status on {}'.format(self.name, p.name, status.created_at))
rows.append(WeiboStatus(
status_id = status.id,
user_id = p.name,
creation_time = status.created_at,
text = status.text,
reposts_count = status.reposts_count,
attitudes_count = status.attitudes_count,
comments_count = status.comments_count,
source = status.source
))
print('check row {}'.format(p.name)) # line 50
except:
pass
return name, rows
和WeiboStatus
我们定义为:
import datetime
from sqlalchemy import Column, ForeignKey, text
from sqlalchemy.dialects.mysql import BIGINT, VARCHAR, DATETIME, INTEGER, LONGTEXT, TEXT
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
from weibo.DB.Models.Followee import Followees
BASE = declarative_base()
class WeiboStatus(BASE):
__tablename__ = 'user_weibo_status'
status_id = Column('status_id', VARCHAR(60), primary_key=True)
user_id = Column('user_id', VARCHAR(60), ForeignKey('followees.uid'))
user_name = Column('user_name', VARCHAR(60), ForeignKey('followees.name'))
creation_time = Column('creation_time', DATETIME, nullable=False, default=datetime.datetime.utcnow)
text = Column('text', LONGTEXT(collation='utf8_bin'), nullable=True, default=None)
reposts_count = Column('reposts_count', INTEGER)
attitudes_count = Column('attitudes_count', INTEGER)
comments_count = Column('comments_count', INTEGER)
source = Column('source', TEXT) # todo: maybe other text type...
我遇到的问题是第50行print('check row {}'.format(p.name))
从未执行。
我不知道为什么代码停留在rows.append(WeiboStatus(...))
上
我使用sqlalchemy错误吗?