如何让用户在sqlite3中输入TABLE名字,python3?
How to let user input TABLE name in sqlite3, python3?
我需要提示用户创建一个学生table,检查数据库中是否存在具有这样名称的table,如果不存在则创建它。
import sqlite3
conn = sqlite3.connect('School')
print ("Database has been created")
def create_table():
TableName = input("Enter table name: ")
tb_create ="""CREATE TABLE , (TableName,) (ID INT PRIMARY KEY,title VARCHAR(10), forename VARCHAR(20),
surname VARCHAR(20))"""
tb_exists ="SELECT name FROM sqlite_master WHERE type='table' AND name= ?", (TableName,)
if not conn.execute(tb_exists).fetchone():
conn.execute(tb_create)
print ("Table created successfully")
else:
print ("Table Exists!")
我知道可以将用户输入的值插入到 table 中,但是如何创建一个带有输入名称的 table? CREATE TABLE 之后应该做什么?如果我使用 , (TableName,) 代码将无法编译。
另外,一旦新的 table 被添加到数据库中,我如何在 INSER INTO 查询中指明它的名字?
def insert_data():
conn.execute("INSERT INTO TableName (ID,title,forename,surname)VALUES \
(234,'Mr','XXX','XXX'")
conn.commit()
CREATE TABLE
语句的正确语法是:
CREATE TABLE tablename(column1 datatype1, column2 datatype2, ....)
既然你想让用户提供table的名字,你可以用字符串插值来完成,因为你不能在[=35中用?
占位符传递它=] 作为参数查询:
tb_create = f"CREATE TABLE [{TableName}](ID INTEGER PRIMARY KEY, title TEXT, forename TEXT, surname TEXT)"
table 的名称必须括在方括号内,以防用户提供的名称无效(例如以数字开头或包含空格)。
此外,如果您希望列 ID
自动递增,则必须使用 INTEGER
而不是 INT
作为其数据类型。
此外,SQLite 中没有 VARCHAR
数据类型。使用 TEXT
.
您可以将变量 TableName
定义为全局变量,以便您可以在所有函数中使用它,例如 insert_data()
.
也对 INSERT
语句使用字符串插值。
import sqlite3
conn = sqlite3.connect("School")
print ("Database has been created")
TableName = ""
def create_table():
global TableName
TableName = input("Enter table name: ").strip()
tb_exists ="SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?"
if not conn.execute(tb_exists, (TableName,)).fetchone():
tb_create = f"CREATE TABLE [{TableName}](ID INTEGER PRIMARY KEY, title TEXT, forename TEXT, surname TEXT)"
conn.execute(tb_create)
print("Table created successfully")
else:
print("Table Exists!")
def insert_data():
if len(TableName) > 0:
conn.execute(f"INSERT INTO [{TableName}] (ID,title,forename,surname) VALUES (234,'Mr','XXX','XXX')")
conn.commit()
create_table()
insert_data()
table 或列的名称无法参数化,因此您必须构建查询字符串。这意味着您应该控制输入的名称是 sane 因为从字符串构建查询已知是 SQL injection.
的向量
但是大多数(如果不是全部)SQL 数据库允许创建 table 如果它不存在。语法只是:
CREATE TABLE table_name IF NOT EXISTS (
column_name type,
...)
所以在这里,你可以这样做:
import re
...
def create_table():
TableName = input("Enter table name: ")
# control name:
if not re.match(r'\w*$', TableName):
raise IllegalValue("Invalid table name")
tb_create =f"""CREATE TABLE {TableName} IF NOT EXISTS (ID INT PRIMARY KEY,title VARCHAR(10),
forename VARCHAR(20), surname VARCHAR(20))"""
conn.execute(tb_create)
我需要提示用户创建一个学生table,检查数据库中是否存在具有这样名称的table,如果不存在则创建它。
import sqlite3
conn = sqlite3.connect('School')
print ("Database has been created")
def create_table():
TableName = input("Enter table name: ")
tb_create ="""CREATE TABLE , (TableName,) (ID INT PRIMARY KEY,title VARCHAR(10), forename VARCHAR(20),
surname VARCHAR(20))"""
tb_exists ="SELECT name FROM sqlite_master WHERE type='table' AND name= ?", (TableName,)
if not conn.execute(tb_exists).fetchone():
conn.execute(tb_create)
print ("Table created successfully")
else:
print ("Table Exists!")
我知道可以将用户输入的值插入到 table 中,但是如何创建一个带有输入名称的 table? CREATE TABLE 之后应该做什么?如果我使用 , (TableName,) 代码将无法编译。 另外,一旦新的 table 被添加到数据库中,我如何在 INSER INTO 查询中指明它的名字?
def insert_data():
conn.execute("INSERT INTO TableName (ID,title,forename,surname)VALUES \
(234,'Mr','XXX','XXX'")
conn.commit()
CREATE TABLE
语句的正确语法是:
CREATE TABLE tablename(column1 datatype1, column2 datatype2, ....)
既然你想让用户提供table的名字,你可以用字符串插值来完成,因为你不能在[=35中用?
占位符传递它=] 作为参数查询:
tb_create = f"CREATE TABLE [{TableName}](ID INTEGER PRIMARY KEY, title TEXT, forename TEXT, surname TEXT)"
table 的名称必须括在方括号内,以防用户提供的名称无效(例如以数字开头或包含空格)。
此外,如果您希望列 ID
自动递增,则必须使用 INTEGER
而不是 INT
作为其数据类型。
此外,SQLite 中没有 VARCHAR
数据类型。使用 TEXT
.
您可以将变量 TableName
定义为全局变量,以便您可以在所有函数中使用它,例如 insert_data()
.
也对 INSERT
语句使用字符串插值。
import sqlite3
conn = sqlite3.connect("School")
print ("Database has been created")
TableName = ""
def create_table():
global TableName
TableName = input("Enter table name: ").strip()
tb_exists ="SELECT name FROM sqlite_master WHERE type = 'table' AND name = ?"
if not conn.execute(tb_exists, (TableName,)).fetchone():
tb_create = f"CREATE TABLE [{TableName}](ID INTEGER PRIMARY KEY, title TEXT, forename TEXT, surname TEXT)"
conn.execute(tb_create)
print("Table created successfully")
else:
print("Table Exists!")
def insert_data():
if len(TableName) > 0:
conn.execute(f"INSERT INTO [{TableName}] (ID,title,forename,surname) VALUES (234,'Mr','XXX','XXX')")
conn.commit()
create_table()
insert_data()
table 或列的名称无法参数化,因此您必须构建查询字符串。这意味着您应该控制输入的名称是 sane 因为从字符串构建查询已知是 SQL injection.
的向量但是大多数(如果不是全部)SQL 数据库允许创建 table 如果它不存在。语法只是:
CREATE TABLE table_name IF NOT EXISTS (
column_name type,
...)
所以在这里,你可以这样做:
import re
...
def create_table():
TableName = input("Enter table name: ")
# control name:
if not re.match(r'\w*$', TableName):
raise IllegalValue("Invalid table name")
tb_create =f"""CREATE TABLE {TableName} IF NOT EXISTS (ID INT PRIMARY KEY,title VARCHAR(10),
forename VARCHAR(20), surname VARCHAR(20))"""
conn.execute(tb_create)