Re: Чому не працюють запити підкажіть будьласка.
А значення self.row і self.column настільки таємні, що ви не хочете навіть написати, що вони таємні?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Бази даних → Чому не працюють запити підкажіть будьласка.
А значення self.row і self.column настільки таємні, що ви не хочете навіть написати, що вони таємні?
А значення self.row і self.column настільки таємні, що ви не хочете навіть написати, що вони таємні?
ні просто вони не такі важливі адже column(назва стовпця) це рядок(стрічка, лента, string).
self.column це передане з викликаючої функції int (віл 1 до 9 залежить від конкретних даних користувача)
self.row це ідентифікатор локації локації(str), в конкретному випадку береться з таблиці характеристик персонажа напроти назви параметра "локація"
Тоді доведеться ще трохи уточнювати структуру таблиці location_subscribe - ви ж про неї ніц не написали, а вона у вас, як я бачу, нетривіальна. Чому запит стовпчика іде числом? Ви точно певні, що вам не доведеться колись додавати ще один стовпчик?
locatiоn_subscribe це таблиця з описами локації. Кожна локація має описи локації але в залежності від попередніх дій гравця стан локації повинен мінятися тому я зробив таблицю
з станами локації. Далі для кожного користувача створюється таблиця з поточним станами локацій. При переході на локацію з Таблиці поточних станів локацій дістаєм поточне значення стану локації(котра зберігається як INTEGER для лекшої обробки, то таке суб'єктивне рішення) і передаєм його
LocationDiscription як column і за допомогою нього формується назва необхідного рядка.
class LocationDiscription():
def __init__(self, column, row):
self.connection = sqlite3.connect("static_tables.db")
self.cursor = self.connection.cursor()
self.column = column
self.row = row
def return_location_descript(self):
print(self.column, self.row)
column = "status_"+str(self.column)
return(self.cursor.execute(f"SELECT {column}, location_id='{self.row}' FROM location_subscribe ").fetchone()[0])
Структура:
CREATE TABLE "location_subscribe" (
"location_id" TEXT UNIQUE,
"name_location" TEXT,
"status_0" TEXT,
"status_1" TEXT,
"status_2" TEXT,
"status_3" TEXT,
"status_4" TEXT,
"status_6" TEXT,
"status_7" TEXT,
"status_8" TEXT,
"status_9" TEXT
);
Тоді доведеться ще трохи уточнювати структуру таблиці location_subscribe - ви ж про неї ніц не написали, а вона у вас, як я бачу, нетривіальна. Чому запит стовпчика іде числом? Ви точно певні, що вам не доведеться колись додавати ще один стовпчик?
locatiоn_subscribe це таблиця з описами локації. Кожна локація має описи локації але в залежності від попередніх дій гравця стан локації повинен мінятися тому я зробив таблицю
з станами локації. Далі для кожного користувача створюється таблиця з поточним станами локацій. При переході на локацію з Таблиці поточних станів локацій дістаєм поточне значення стану локації(котра зберігається як INTEGER для лекшої обробки, то таке суб'єктивне рішення) і передаєм його
LocationDiscription як column і за допомогою нього формується назва необхідного стовпця.
class LocationDiscription():
def __init__(self, column, row):
self.connection = sqlite3.connect("static_tables.db")
self.cursor = self.connection.cursor()
self.column = column
self.row = row
def return_location_descript(self):
print(self.column, self.row)
column = "status_"+str(self.column)
return(self.cursor.execute(f"SELECT {column}, location_id='{self.row}' FROM location_subscribe ").fetchone()[0])
Структура:
CREATE TABLE "location_subscribe" (
"location_id" TEXT UNIQUE,
"name_location" TEXT,
"status_0" TEXT,
"status_1" TEXT,
"status_2" TEXT,
"status_3" TEXT,
"status_4" TEXT,
"status_6" TEXT,
"status_7" TEXT,
"status_8" TEXT,
"status_9" TEXT
);
Але ви щось робите неправильно з базою.
Можете навести на думку що саме, бо мені теж так здається я не можу зрозуміти що.
Для цього знадобиться детальний опис того, що саме ви зберігаєте в базі.
Наприклад, у таблиці персонажів ви зберігаєте пари "параметр-значення". У персонажів унікальні набори параметрів, чи все ж є такі, що є у всіх персонажів? Може, тоді виділити для постійних параметрів окремі стовпчики?
"id" INTEGER,
"name" TEXT,
"exp" INTEGER,
"level" INTEGER, --а точно потрібні обидва?
"health" INTEGER ...
Тоді посилання на локацію (її id) можна буде зробити числом - персонаж же ніби зобов'язаний десь знаходитися, в гіршому разі можна NULL поставити.
Далі - якщо у вас є купа стовпчиків з назвами "status_0", "status_1" і т.д., то вам, схоже, потрібна окрема таблиця
location_id --TEXT чи INTEGER, що там
number INTEGER, --наприклад, 0, 1, 2, те, що після status_ бул
value TEXT --а тут те, що зберігалося в i-му статусі
Бо інакше будете додавати і додавати.
Для цього знадобиться детальний опис того, що саме ви зберігаєте в базі.
Наприклад, у таблиці персонажів ви зберігаєте пари "параметр-значення". У персонажів унікальні набори параметрів, чи все ж є такі, що є у всіх персонажів? Може, тоді виділити для постійних параметрів окремі стовпчики?"id" INTEGER, "name" TEXT, "exp" INTEGER, "level" INTEGER, --а точно потрібні обидва? "health" INTEGER ...
Я думаю що потрібні обидва якщо еxp % 300*(level+1) == 0 то level+=1. Можна зберігати лише exp і зробити щоб функція то рахувала кожнго разу (доречі вона ще навіть не написана) але я боюсь що зачну губитись в тім всім.
Далі - якщо у вас є купа стовпчиків з назвами "status_0", "status_1" і т.д., то вам, схоже, потрібна окрема таблиця
То власне і є та окрема таблиця а стовпчик location_name доданий щоб самому якось в тім орієнтуваьтся.
якщо боїшся розгубитися, пиши ооп
якщо боїшся розгубитися, пиши ооп
ооп не значить що я не розгублюсь.
якщо боїшся розгубитися, пиши ооп
Не дуже вдала порада стосовно організації БД.
Тут, радше, треба ER-діаграму намалювати. І хоча б 1НФ і 2НФ прочитати і засвоїти.
І хоча б 1НФ і 2НФ прочитати і засвоїти.
Вибачаюсь вот из 1НФ і 2НФ.
Білодід також відправляв у застаріле "зайві" слова, яких не було в російській мові, щоб уможливити переклади 1:1.
Ну і ви ж не ту сторінку Вікі дивитеся: https://uk.wikipedia.org/wiki/Рядок_(програмування)
Чудово, посилання на сучасні джерела, які можуть спиратися на Білодіда, саму Вікіпедію, локалізаторські фантазії з форуму «Домівки» і т.д. Покажіть мені стрічку тексту, яка існувала до Білодіда й не була білодідівською. Як на мене, Білодід тут сам підвищив випадково вжиту кальку до рівня ніби-то поширеного архаїзму, а наші сучасники його справу продовжили.
Як на мене, Білодід тут сам підвищив випадково вжиту кальку до рівня ніби-то поширеного архаїзму, а наші сучасники його справу продовжили.
Білодід цього не робив, бо взагалі не розглядав того сенсу, про який ми говоримо.
ні просто вони не такі важливі адже column(назва стовпця) це рядок(стрічка, лента, string).
self.column це передане з викликаючої функції int (віл 1 до 9 залежить від конкретних даних користувача)
self.row це ідентифікатор локації локації(str), в конкретному випадку береться з таблиці характеристик персонажа напроти назви параметра "локація"
А я уже знаю, звідки у вас була помилка "sqlite3.OperationalError: no such column: a1x1". Зізнайтеся чесно, ви ж без дебагера працюєте?
P.Y. написав:Як на мене, Білодід тут сам підвищив випадково вжиту кальку до рівня ніби-то поширеного архаїзму, а наші сучасники його справу продовжили.
Білодід цього не робив, бо взагалі не розглядав того сенсу, про який ми говоримо.
Той сенс, про який ми говоримо, має спиратись на історичні зразки. Бо якщо ми беремо, наприклад, гарне українське слово «мотузка» і починаємо його використовувати, наприклад, у значенні «модуль», то це нонсенс — навіть попри те, що слово «мотузка» справді є в українських словниках і навіть має на слух віддалену схожість з іншомовним словом «модуль». Добре, колись у минулому не було комп'ютерів — проте, слова та літери вже були, існували друкарські й мовознавчі терміни. Саме від них слід відштовхуватись, а не брати випадкові слова зі словника й чіпляти їм випадкові значення з голови.
pluszz написав:ні просто вони не такі важливі адже column(назва стовпця) це рядок(стрічка, лента, string).
self.column це передане з викликаючої функції int (віл 1 до 9 залежить від конкретних даних користувача)
self.row це ідентифікатор локації локації(str), в конкретному випадку береться з таблиці характеристик персонажа напроти назви параметра "локація"А я уже знаю, звідки у вас була помилка "sqlite3.OperationalError: no such column: a1x1". Зізнайтеся чесно, ви ж без дебагера працюєте?
Чесно установив PyCharm не поперло текстовий редактор + командний рядок.