3

出力が次のようなKivyコードがあります。

ここに画像の説明を入力

Box No.MySQL から取得した文字列に置き換えたい

これまでのところ、MySQL を Python スクリプトに実装しようとしました。

class RemoveScreen(MyLayout):


    def __init__(self,**kwargs):
        db = MySQLdb.connect("localhost", "root", "[PASSWORD]", "tcs_microrage_crm")
        cursor=db.cursor()
        self.var = StringVar()
        self.label1 = Label(self, text=0, textvariable=self.var)
        myvar=str(self.var)
        #http://stackoverflow.com/questions/775296/python-mysql-parameterized-queries
        cursor.execute("SELECT part_name FROM stock_lists WHERE part_number = %s", (myvar))
        self.myvar=StringVar()
        self.myvar.set(cursor.fetchone())
        self.label2 = Label(self, text=0, textvariable=myvar)

しかし、これはうまくいきませんでした。

Q: MySQL クエリを実行して、kv ファイルに個々の文字列を出力するにはどうすればよいですか。

4

1 に答える 1

4

その方法を示すために、ちょっとした検索の例を作りました。
これにより、データベース内の果物の名前が検索され、その名前と価格がテーブルに出力されます。

from kivy.app import App

import MySQLdb

from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput


class DbCon:

    def __init__(self):
        self.db = MySQLdb.connect(user="root",passwd="pw",db="kivy")
        self.c = self.db.cursor()

    def get_rows(self,search = ""):
        self.c.execute("SELECT * FROM fruit WHERE name REGEXP '.*%s.*' LIMIT 3" % search)
        return self.c.fetchall()


class Table(BoxLayout):

    def __init__(self,**kwargs):
        super(Table,self).__init__(**kwargs)

        self.orientation = "vertical"

        self.search_field = BoxLayout(orientation="horizontal")

        self.search_input = TextInput(text='search',multiline=False)
        self.search_button = Button(text="search",on_press=self.search)

        self.search_field.add_widget(self.search_input)
        self.search_field.add_widget(self.search_button)

        self.add_widget(self.search_field)

        self.add_widget(Label(text="table"))

        self.table = GridLayout(cols=2,rows=4)
        self.table.add_widget(Label(text="Fruit"))
        self.table.add_widget(Label(text="Price"))

        self.rows = [[Label(text="item"),Label(text="price")],
                     [Label(text="item"),Label(text="price")],
                     [Label(text="item"),Label(text="price")]]

        for item,price in self.rows:
            self.table.add_widget(item)
            self.table.add_widget(price)

        self.add_widget(self.table)


        self.db = DbCon()
        self.update_table()


    def update_table(self,search=""):
        for index,row in enumerate(self.db.get_rows(search)):
            self.rows[index][0].text = row[1]
            self.rows[index][1].text = str(row[2])

    def clear_table(self):
        for index in range(3):
            self.rows[index][0].text = ""
            self.rows[index][1].text = ""


    def search(self, *args):
        self.clear_table()
        self.update_table(self.search_input.text)


class MyApp(App):
    def build(self):
        return Table()


MyApp().run()
于 2016-08-07T00:19:46.810 に答える