Тема: SQLite3 python3 додавання стовбців в створену таблицю
Доброго вечора?
Шукав в інтернеті чи можливо це реалізувати.
Нічого не знайшов.
Тому вирішив спитати тут, чи можливо це якось реалізувати?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Python → SQLite3 python3 додавання стовбців в створену таблицю
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Доброго вечора?
Шукав в інтернеті чи можливо це реалізувати.
Нічого не знайшов.
Тому вирішив спитати тут, чи можливо це якось реалізувати?
Якщо хтось сюди зазирне то ось відповідь:
Кілька коментарів до коду.
1. Глобальні змінні - зло. А в цьому коді вони ще й не мають жодного сенсу, бо db та SQL перестворюються в обох функціях.
2. Ви перевідкриваєте з'єднання в обох функціях, що неефективно.
Ці проблеми легко вирішити, створивши клас, що інкапсулює з'єднання.
class Connection:
def __init__(self, dbname = 'db.db'):
self.database = sqlite3.connect(dbname)
self.cursor = database.cursor()
#commit тут не потрібен, жодних змін не внесено
def create_table(self, ...):
#не треба start_db і глобальні змінні, використовуємо self
...
def create_column(self, ...):
#не треба start_db
...
if __name__ == '__main__':
conn = Connection()
conn.create_table('table_1')
conn.create_column('table_1', 'column_1', 'INTEGER')
3. Ви передаєте в БД невичищені стрічки, що є антипатерном безпеки (гугліть Bobby Tables). Найкращий спосіб уникнути проблем - використовувати знаки питання чи іменні підставлення:
SQL.execute("""CREATE TABLE IF NOT EXISTS ? (
id INTEGER
)""", (table_name,))
args = {"table_name":table_name, "column_name":column_name, "column_class":column_class}
SQL.execute("""ALTER TABLE :table_name ADD COLUMN :column_name :column_class""", args)
Та я так, з цікавості цим займаюсь :3
Але всеодно дякую!
Перепрошую, я звісно не професіонал, але мені 'здаєтся' що оператор new не потрібен я ось просидів пів години і шукав в інтернеті про оператор new в пайтон...
Його нібито як і констант не існує, ну на моїй версії пайтон (3.6.9)
Та й оця частина коду не працює =(
def create_column(self, table_name, column_name, column_class):
args = {
"table_name" : table_name,
"column_name" : column_name,
"column_class" : column_class
}
self.cursor.execute("""ALTER TABLE :table_name ADD COLUMN :column_name :column_class""", args)
self.database.commit()
А решта ніби все працює :3
Дякую за уточнення по new, дійсно, помилка. Виправив.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися