迭代sqlalchemy ORM记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代sqlalchemy ORM记录相关的知识,希望对你有一定的参考价值。

我有一个用sqlalchemy创建的sqlite数据表,我想在PyQt5 qtablewidget上表示。

    def createTable(self, tableData):
      self.qTable = session.query(tableData).all()
      self.tableWidget = QTableWidget()
      self.tableWidget.setRowCount(0)
      self.tableWidget.setColumnCount(tableData.cols)
      self.tableWidget.setHorizontalHeaderLabels(tableData.col_headers)
      for row, form in enumerate(self.qTable):
        self.tableWidget.setRowCount(row+1)
           for col,record in enumerate(form):
                self.tableWidget.setItem(row, col, QTableWidgetItem(record))

这打破了界限

for col,record in enumerate(form):

错误“TypeError:'Tests'对象不可迭代”

ORM是使用此代码构建的

class Tests(Base):
  __tablename__ = 'tests'
  id = Column(Integer, primary_key=True)
  current = Column(Boolean)
  temp = Column(Float)
  brine = Column (Float)
  test = Column(String)
  pc = Column(Float)
  wait_time = Column(Integer)
  headers = {"current","temp","brine","test","pc","wait time"}

有没有办法使这个可迭代?还是一个更简洁的处理方法?

答案

谢谢@SuperShoot,这对我来说非常好,这里是我使用的最终代码

 for row, form in enumerate(self.qTable):
        col = 0
        self.tableWidget.setRowCount(row+1)
        for c in columns:
            for k,v in vars(form).items():
                if k == c:
                    self.tableWidget.setItem(row, col, QTableWidgetItem(str(v)))
                    col +=1

我添加了额外的逻辑,所以我可以定义列顺序,

以上是关于迭代sqlalchemy ORM记录的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy ORM 一对多关系未从数据库加载所有记录

SQLAlchemy -- Python的SQLAlchemy和ORM

Flask ORM SQLAlchemy数据操作完整案例

Flask ORM SQLAlchemy数据操作完整案例

SQLAlchemy

SQLAlchemy