Я новичок в Python и создаю настольное приложение для себя.Одно из моих окон - «Добавить компанию».Вот скриншот: https://ibb.co/hgyFAL
До сих пор я собираю данные от пользователей и храню в SQLite3 с кодом ниже:
import sqlite3 as sql
import os
def create_new_company(
name,
address,
district,
city,
country,
general_email,
phone1,
phone2,
fax,
tax_number,
tax_administration,
activity_area,
contact,
contact_task,
is_client,
is_supplier,
is_in_mail_list,
is_in_sms_list,
is_in_black_list,
note,
is_active):
db = sql.connect(str(os.getcwd() + '\\Databases\\main_db.sqlite3'))
cursor = db.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS `companies` (
`company_id` INTEGER NOT NULL DEFAULT 0000001 PRIMARY KEY AUTOINCREMENT UNIQUE,
`name` TEXT,
`address` TEXT,
`district` TEXT,
`city` TEXT,
`country` TEXT,
`general_email` TEXT,
`phone1` NUMERIC,
`phone2` NUMERIC,
`fax` NUMERIC,
`tax_number` TEXT,
`tax_administration` NUMERIC,
`activity_area` TEXT,
`contact` TEXT,
`contact_task` TEXT,
`is_client` INTEGER,
`is_supplier` INTEGER,
`is_in_mail_list` INTEGER,
`is_in_sms_list` NUMERIC,
`is_in_black_list` NUMERIC,
`note` TEXT,
`is_active` NUMERIC);""")
values = (
name,
address,
district,
city,
country,
general_email,
phone1,
phone2,
fax,
tax_number,
tax_administration,
activity_area,
contact,
contact_task,
is_client,
is_supplier,
is_in_mail_list,
is_in_sms_list,
is_in_black_list,
note,
is_active
)
script= """INSERT INTO companies VALUES (
NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"""
cursor.execute(script, values)
db.commit()
db.close()
До прошлой недели я не делалвсе равно, код хороший или нет.Но приложение растет, и я боюсь, что не смогу управлять кодом в будущем.На самом деле, даже сейчас я не могу справиться, и у меня просто 3 окна.: /
Итак, я начинаю спрашивать себя, «как это может быть лучше», и я искал в Интернете свой вопрос.Я нашел хорошие источники и отличный совет, и я обновил свой код следующим образом:
class SQLCommands:
sqlite_file = str(os.getcwd() + '\\test.db')
def __init__(self):
if os.path.exists(self.sqlite_file):
pass
else:
self.create_new_database(self.sqlite_file)
def create_new_database(self, database_path):
with sqlite3.connect(database_path) as conn:
c = conn.cursor()
c.execute("""CREATE TABLE IF NOT EXISTS `companies` (
`company_id` INTEGER NOT NULL PRIMARY KEY UNIQUE,
`name` TEXT);""")
self.close(conn)
def connect(self, database_path):
with sqlite3.connect(database_path) as conn:
c = conn.cursor()
return conn, c
def close(self, conn):
conn.commit()
conn.close()
С последним обновлением я думаю, что лучше, и основные функции в порядке.Но теперь я застрял здесь, и мне нужна дорожная карта.
Я представляю себе функцию, подобную приведенной ниже, но не могу подвести конец:
class SQLCommands:
sqlite_file = str(os.getcwd() + '\\test.db')
# def other_fucntions
# ...some codes here...
# .....
def insert(self, table, column, value):
conn, c = self.connect(self.sqlite_file)
values = (value,)
script = """INSERT INTO {} VALUES (?)""".format(table) # I'm not sure if the correct way is this
c.execute(script, value)
conn.commit()
conn.close()
del value, script, conn, c
Я представляю себе, как использовать это:
class Company(tk.Toplevel):
def __init__(self):
self.init_ui()
def init_ui(self):
company_name_lbl = ttk.Label(self, text="Company Name").grid(
row=1, column=0, sticky='w')
self.company_name_entry = ttk.Entry(self)
self.company_name_entry.grid(row=1, column=1)
company_address_lbl = ttk.Label(self, text="Company Address").grid(
row=1, column=0, sticky='w')
self.company_address_entry = ttk.Entry(self)
self.company_address_entry.grid(row=1, column=1)
save_btn = ttk.Button(self, text="Save", command=self.insert_to_sql)
def insert_to_sql(self):
value_list = ["NULL", self.company_name_entry.get(), self.company_address_entry.get()]
column_header_list = ["company_id", "name", "adress"]
sql = SQLCommands()
for i in range(len(value_list)):
sql.insert(table="companies", column=column_header_list[i], value=value_list[i])
Моя будущая цель - изучить Django и перенести мое приложение в Интернет с Django.Итак, класс SQLCommands не должен зависеть от Tkinter.
Я на правильном пути?Это правильный способ сделать?Если да, то как мне заполнить код "SQLCommands.insert"
Мой английский может быть неясным, но я стараюсь изо всех сил.
Извините заранее, и большое спасибо заранее.Alperen