@Makoto1972 (makoto 1972)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

FletのDataFrameでsqlite3のデータを検索するサンプルが知りたい

解決したいこと

Python Fletでsqlite3の検索を行う方法のサンプルを教えてほしいです。

例)
Fletでsqlite3のテーブルのデータを表示することはできました。
DataTableの中身をsqlの発行毎に更新したいのですが
一度作成したDataFrameの更新方法がわかりません。
メソッドなどヒントだけでも教えていただけますでしょうか。

発生している問題・エラー

DataFrameの表を更新できない

例)

import sqlite3

import flet as ft
from flet import *


def main(page: Page):
    page.scrollTo = "always"

    mytable = DataTable(columns=[
        DataColumn(Text("id")),
        DataColumn(Text("namae")),
        DataColumn(Text("barthday")),
        DataColumn(Text("age")),
    ],
        rows=[],
    )
    page.add(mytable)

    def mydata(e):

        mytable.clear()
        page.update()

        dbname = "db/meibo.db"
        conn = sqlite3.connect(dbname)
        cur = conn.cursor()
        sql = "SELECT * FROM t_meibo"
        cur.execute(sql)
        myrows = []
        for i in cur:
            row = DataRow(
                cells=[
                    DataCell(Text(i[0])),
                    DataCell(Text(i[1])),
                    DataCell(Text(i[2])),
                    DataCell(Text(i[3])),
                ],
            )
            myrows.append(row)
        conn.close()

        mytable = DataTable(columns=[
            DataColumn(Text("id")),
            DataColumn(Text("namae")),
            DataColumn(Text("barthday")),
            DataColumn(Text("age")),
        ],
            rows=myrows,
        )
        page.add(mytable)
        page.update()

    my_btn = ElevatedButton(
        "show data", bgcolor="red", color="white", on_click=mydata)
    page.add(my_btn)


ft.app(target=main)

自分で試したこと

英語のサイトなども見ましたがよくわかりませんでした。

0 likes

1Answer

同じような点でつまずいていました。
以下の部分で新規のDataTableインスタンスを定義してしまっているためではないでしょうか?
mytable = DataTable(columns=[
DataColumn(Text("id")),
DataColumn(Text("namae")),
DataColumn(Text("barthday")),
DataColumn(Text("age")),
],
rows=myrows,
)

新規インスタンスを作成する代わりに、
mytable.columns =[
DataColumn(Text("id")),
DataColumn(Text("namae")),
DataColumn(Text("barthday")),
DataColumn(Text("age")),
]
mytable.rows=myrows

としてみてはいかがでしょうか?私のものとコードのストラクチャーは異なりますが、上記のような方法でうまく回りました。

1Like

Comments

  1. @Makoto1972

    Questioner

    お忙しい中ありがとうございます。また夜分遅くありがとうございました。過去記事にも関わらずありがとうございます。参考にさせていただきます。

Your answer might help someone💌