前提・実現したいこと
現在Python3のTkinterとSQLite3で就活のために企業研究で集めた情報の管理ができるアプリケーションを作成しているところです。
そこでSQLite文、DBについて質問があります。
TkinterのEntryで会社名を"Google"と入力した場合Company_listという名前のテーブルにInsertし、同時に"Goggle"という名前のテーブルを作成したいのですが変数を使うとうまくいきません。
このエラーは二回目以降の実行によるものです。TkinterのEntryで入力した名前をcompanyに代入し、company(変数)という名前のテーブルを作成したいのですが変数ではないcompanyという名前のテーブルを作成してしまいます。変数をうまく使えていないことが原因だということはわかるのですが解決方法がわかりません。
SQL文のINSERTの中での変数の扱い方はご教示くださいました方法に変更しましたがCREATEの中での変数の扱いがわかりません。
この解決方法がわかる方教えていただけると助かります。
プログラミング初心者なためできるだけ易しい回答お待ちしています。よろしくお願いいたします。
発生している問題・エラーメッセージ
登録しました Exception in Tkinter callback Traceback (most recent call last): File "/home/USERNAME/anaconda3/lib/python3.6/tkinter/__init__.py", line 1699, in __call__ return self.func(*args) File "teratail.py", line 34, in registration_name Create table company(name TEXT, contents TEXT, memo TEXT)''') sqlite3.OperationalError: table company already exists
該当のソースコード
python
1from tkinter import * 2import sqlite3 3 4#データベース接続 5dbname="teratail.db" 6conn=sqlite3.connect(dbname) 7c=conn.cursor() 8 9#親テーブル作成 10try: 11 c.execute('''Drop table if exists company_list''') 12 c.execute(''' 13 Create table if not exists company_list 14 (company_name TEXT)''') 15 16 17except sqlite3.Error as e: 18 print('sqlite3.Error occurred:', e.args[0]) 19 20 21#登録ボタンを押した時 22def registration_name(): 23 company_name=entry_company_name.get() 24 25 c.execute(''' 26 Insert into company_list(company_name) 27 Values(?)''',(company_name,)) 28 c.execute("COMMIT") 29 print("登録しました") 30 31 company=entry_company_name.get() 32 33 c.execute(''' 34 Create table company(name TEXT, contents TEXT, memo TEXT)''') 35 c.execute('''Insert into company Values('給料','○○万円','○○含む')''') 36 print(company) 37 38 conn.commit() 39 40 41#Tkinterの操作 42root=Tk() 43root.geometry("600x600") 44 45entry_company_name=Entry(root, font=("",12)) 46entry_company_name.pack() 47 48button_registration=Button(root, text="登録", command=registration_name) 49button_registration.pack() 50 51root.mainloop()
試したこと
ご指摘を元に書き換えました。try:を一旦なくしエラーを表示させてみました。
このエラーは二回目以降の実行によるものになります。
補足情報(FW/ツールのバージョンなど)
本ページは一度編集しています。
回答1件
あなたの回答
tips
プレビュー