Создание таблицы SQL на основе переменной - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю базу данных, которая включает в себя 3 основные таблицы:

Пользователи, Назначения, Группы

С другими потенциальными таблицами, которые относятся к таблице «Группы».Эти потенциальные таблицы должны быть таблицами, имена которых основаны на ключевой переменной в таблице «Группы».например, если в таблице групп есть запись с groupName = "Group_One", я хочу создать таблицу с именем "Group_One", а затем сохранить имена пользователей в этой таблице.Так как не вижу практического способа хранить несколько имен пользователей в одной строке таблицы «Группы».

Вот код, который я тестирую, чтобы попытаться реализовать это:

import sqlite3

def Database_Setup():
    Cur.executescript(
                        """
                        CREATE TABLE IF NOT EXISTS USERS
                        (
                        username text,
                        password text,
                        clearance int,
                        classes int
                        );
                        CREATE TABLE IF NOT EXISTS GROUPS 
                        (
                        groupName text
                        teacher text,
                        teachingAssistant text
                        users
                        );
                        CREATE TABLE IF NOT EXISTS ASSIGNMENTS
                        (
                        assignmentID int,
                        assignmentName text,
                        assignmentInfo text,
                        dueDate date,
                        setDate date,
                        completedAmount int
                        )
                        """
                        )
def Potential_Solution():
    Group_Name = "Group1"
    List_Of_Users = ["User1","User2","User3"]
    Cur.execute("""
                      CREATE TABLE IF NOT EXISTS {}
                      (
                      username text,
                      randomVar text
                      )
                      """.format(Group_Name))
                      # This part works fine ^^
    for User in List_Of_Users:
        Cur.execute("INSERT INTO TABLE ? values (?,'Some_Var')",(Group_Name,User))

def Main():
    Database_Setup()
    Potential_Solution()
    Cur.execute("SELECT * FROM Group1")
    print(Cur.fetchall())

if __name__ == "__main__":
    Conn = sqlite3.connect("FOO_DB.db")
    Cur = Conn.cursor()
    Main()

Однако когда я выполняю это, я сталкиваюсь с этой ошибкой:

Traceback (most recent call last):
  File "E:/Python/Py_Proj/DB LIST vs new db example.py", line 53, in <module>
    Main()
  File "E:/Python/Py_Proj/DB LIST vs new db example.py", line 46, in Main
    Potential_Solution()
  File "E:/Python/Py_Proj/DB LIST vs new db example.py", line 42, in Potential_Solution
    Cur.execute("INSERT INTO TABLE ? values (?,Some_Var)",(Group_Name,User))
sqlite3.OperationalError: near "TABLE": syntax error

Есть ли практический способ сделать то, что я пытаюсь достичь?Или я должен прибегнуть к другому методу?

1 Ответ

0 голосов
/ 23 февраля 2019
I tried the following , 
you have to remove TABLE keyword use positional formatting 
Cur.execute("INSERT INTO {0} VALUES('{1}', 'SomeVar')".format(Group_Name,User )
                )

import sqlite3

def Database_Setup():
    Cur.executescript(
                        """
                        CREATE TABLE IF NOT EXISTS USERS
                        (
                        username text,
                        password text,
                        clearance int,
                        classes int
                        );
                        CREATE TABLE IF NOT EXISTS GROUPS 
                        (
                        groupName text
                        teacher text,
                        teachingAssistant text
                        users
                        );
                        CREATE TABLE IF NOT EXISTS ASSIGNMENTS
                        (
                        assignmentID int,
                        assignmentName text,
                        assignmentInfo text,
                        dueDate date,
                        setDate date,
                        completedAmount int
                        )
                        """
                        )
def Potential_Solution():
    Group_Name = "Group1"
    List_Of_Users = ["User1","User2","User3"]
    Cur.execute("""
                      CREATE TABLE IF NOT EXISTS {}
                      (
                      username text,
                      randomVar text
                      )
                      """.format(Group_Name))
    for User in List_Of_Users:
        Cur.execute("INSERT INTO {0} VALUES('{1}', 'SomeVar')".format(Group_Name,User )
                    )





def Main():
    Database_Setup()
    Potential_Solution()
    Cur.execute("SELECT * FROM Group1")
    print(Cur.fetchall())

if __name__ == "__main__":
    Conn = sqlite3.connect("FOO_DB.db")
    Cur = Conn.cursor()
    Main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...