Sqlite hakkında

self.im.execute("""INSERT INTO '{ }' VALUES ({},{},{})""".format(self.tablo_adı,birinci_sütun,ikinci_sütun_üçüncü_sütun))

sqlite3 ile çalışırken aklıma şu soru takıldı?
Kullanıcı, tablo adını ve sütun başlıklarını kendi girebilir mi diye uğraştım fakat yapamadım hata veriyor.Yani aynı anda hem tablo adını hemde sütun isimlerini giremiyorum.Nasıl yapabilirim?

import sqlite3 as sql

db_yolu = "/sdcard/python/deneme.db"

tablo_isim = input("database tablo ismi: ")
stun1_isim = input("1. stun ismi: ")
stun2_isim = input("2. stun ismi: ")
stun1_deger = input("{}, için değer girin : ".format(stun1_isim))
stun2_deger = input("{}, için değer girin : ".format(stun2_isim))

tablo_olustur = f"""CREATE TABLE IF NOT EXISTS "{tablo_isim}" ("{stun1_isim}", "{stun2_isim}")"""
deger_gir = f"""INSERT INTO "{tablo_isim}" VALUES ("{stun1_deger}", "{stun2_deger}")"""

def baglan(database_yolu):
	veritabanı = sql.connect(database_yolu)
	imlec = veritabanı.cursor()
	imlec.execute(tablo_olustur)
	imlec.execute(deger_gir)
	veritabanı.commit()
	veritabanı.close()

baglan(db_yolu)

Sanırım şöyle bişi yapmak istiyosun.

Query’deki bosluklar sutun ismi degil, sutun degerlerinin yerleri.
SQL’de tablo/sutun/identifier isimleri tek degil cift tirnakla belirtilir. Tek tirnak string anlamina geliyor.

Once calisan bir tane INSERT query’si yapsan da ondan sonra isimleri kullanicidan almaya kalksan daha kolay olmaz mi?

https://sqlite.org/lang_insert.html

Yaptığınız gibi yaptım fakat o dosyanın konumuna bakıyorum oluşan tabloyu bulamıyorum

Ben burdan hiçbişey anlamadım desem :rofl:

Sizinle bir kod paylaşayım, bir inceleyin isterseniz, belki faydası dokunur.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

connect = __import__("sqlite3").connect("test.db")
cursor = connect.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS DATA(no)")


def add_column(column: str = ""):
    cursor.execute(f"ALTER TABLE DATA ADD COLUMN {column}")
    connect.commit()


def del_column(saved_columns: list = []):
    cursor.execute(
        f"CREATE TABLE IF NOT EXISTS SAVE({', '.join(saved_columns)})"
    )
    for i in cursor.execute(
            f"SELECT {', '.join(saved_columns)} FROM DATA"
    ):
        cursor.execute(
            f"INSERT INTO SAVE VALUES"
            f"({', '.join('?' * len(saved_columns))})", i
        )
    cursor.execute("DROP TABLE DATA")
    cursor.execute("ALTER TABLE SAVE RENAME TO DATA")
    connect.commit()


def add_data(*args):
    no = 1 + len(list(cursor.execute("SELECT * FROM DATA")))
    data = (no, *args)
    cursor.execute(
        f"INSERT INTO DATA VALUES({', '.join('?' * len(data))})", data
    )
    connect.commit()


def change_data(no: int = 1, select: str = "", new: str = ""):
    cursor.execute(
        f"UPDATE DATA SET {select} = ? WHERE no = ?", (new, no)
    )
    connect.commit()


def del_data(no: int = 1):
    cursor.execute("DELETE FROM DATA WHERE no = ?", (no,))
    for i, j in enumerate(list(cursor.execute("SELECT * FROM DATA"))):
        cursor.execute(
            f"UPDATE DATA SET no = {i + 1} WHERE no = {j[0]}"
        )
    connect.commit()
   
    
if __name__ == "__main__":
    # Oluşturmak istediğiniz sütunun ismini yazın.
    add_column("Sütun1")
    # Silmek istediğiniz sütunu sütun listesine yazmayın.
    # Bu durumda "Sütun-1" sütunu silinir.
    del_column(["no"])
    # İsmi "isim" ve "soyisim" olan iki adet yeni sütun oluşturalım.
    add_column("isim")
    add_column("soyisim")
    # Sütunlara değerler ekleyelim.
    add_data("Ayşe", "Saygılı")
    add_data("Hasan", "Gümüş")
    add_data("Lale", "Dizdar")
    add_data("Murat", "Güneş")
    # Eklediğimiz verilerden bazılarını değiştirelim.
    change_data(1, "isim", "Fatma")
    change_data(2, "soyisim", "Değirmenci")
    # İkinci satırdaki veriyi silelim.
    del_data(2)

Hic sorun degil :​) Ama soyleyeyim, gordugum sentaks tanimlarindan en anlasilabilir olani :​)

Kisaca INSERT INTO "schema"."tablo" ("kolon1", "kolon2") VALUES (deger1, deger2)