我需要提示用户创建一个student表,检查数据库中是否存在具有此名称的表,如果不存在,则创建它
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!")
我知道可以将用户输入的值插入表中,但如何创建具有输入名称的表?创建表之后应该做什么?如果我使用,(TableName,)代码将无法编译。 另外,一旦将新表添加到数据库中,如何在INSER INTO查询中指示其名称
def insert_data():
conn.execute("INSERT INTO TableName (ID,title,forename,surname)VALUES \
(234,'Mr','XXX','XXX'")
conn.commit()
无法参数化表或列的名称,因此必须生成查询字符串。这意味着您应该控制输入的名称是sane,因为从字符串生成查询是已知的SQL injection的向量
但大多数(如果不是全部的话)SQL数据库允许在表不存在的情况下创建表。语法只是:
在这里,你可以做:
CREATE TABLE
语句的正确语法为:由于您希望用户提供表的名称,因此可以使用字符串插值,因为您不能在sql查询中将
?
占位符作为参数传递:表格的名称必须括在方括号内,以防用户提供的名称无效(例如以数字开头或包含空格)。
此外,如果希望列
ID
自动递增,则必须使用INTEGER
而不是INT
作为其数据类型。此外,SQLite中没有
VARCHAR
数据类型。使用TEXT
。您可以将变量
TableName
定义为全局变量,以便在所有函数中使用它,如insert_data()
。对
INSERT
语句也使用字符串插值相关问题 更多 >
编程相关推荐