起因
为了方便处理数据,Python常常会用pandas中的DataFrame对数据进行处理。有一次我想把SQLAlchemy查询出来的结果对象转化为DataFrame,期间遇到了一些问题
问题现象
这是model部分代码
class InvAppService(db.Model):
__tablename__ = 'inv_app_service'
id = db.Column(db.Integer, primary_key=True)
ip = db.Column(db.String(16), unique=True, nullable=False)
host = db.Column(db.String(32))
def to_json(self):
return {
'ip': self.ip,
'host': self.host,
'LDR': self.app.app_devopses_name().get('LDR'),
'DEV': self.app.app_devopses_name().get('DEV'),
'INF': self.app.app_devopses_name().get('INF'),
'OPS': self.app.app_devopses_name().get('OPS')
}
def__repr__(self):
return '<InvAppService %r>' % self.name
在控制端我想把查询出的结果转化为df,刚开始用了下面的方法,结果rtn一直是空,但单独在jupyter测试pd.DataFrame().append({’IP’:xx,‘host’:xx,…},ignore_index=True)是可以加入数据的。后来经过各种尝试,包括把service.to_json_ip()先转化为Series再加入df也还是不行
import pandas as pd
……
services = InvAppService.query.all()
rtn = pd.DataFrame()
for service in services:
rtn.append(service.to_json_ip(),ignore_index=True)
最后采用了下面的方法才正常转化为df格式数据
import pandas as pd
……
services = InvAppService.query.filter_by(status_code='00').all()
rtn = []
for service in services:
rtn.append(service.to_json_ip())
rtn = pd.DataFrame(rtn)