我需要提示用户创建一个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!")
我知道可以将用户输入的值插入到表中,但是我如何创建一个带有输入名称的表?CREATE TABLE
后面应该写什么?如果我使用,(TableName),代码将无法编译。另外,一旦新表被添加到数据库中,我如何在INSER INTO查询中指示它的名称?
def insert_data():
conn.execute("INSERT INTO TableName (ID,title,forename,surname)VALUES \
(234,'Mr','XXX','XXX'")
conn.commit()
2条答案
按热度按时间zu0ti5jz1#
CREATE TABLE
语句的正确语法为:既然你想让用户提供表的名称,你可以用字符串插值来完成,因为你不能在sql查询中用一个
?
占位符作为参数来传递它:表名必须用方括号括起来,以防用户提供的名称无效(例如,它以数字开头或包含空格)。
此外,如果希望列
ID
自动增量,则必须使用INTEGER
而不是INT
作为其数据类型。此外,SQLite中没有
VARCHAR
数据类型,请使用TEXT
。您可以将变量
TableName
定义为全局变量,以便可以在所有函数中使用它,例如insert_data()
。对
INSERT
语句也使用字符串插值。jexiocij2#
表或列的名称不能参数化,因此必须构建查询字符串。这意味着您应该控制输入的名称是否为“sane”,因为从字符串构建查询是SQL injection的矢量。
但大多数(如果不是全部)SQL数据库允许创建一个表,如果它已经不存在。语法如下:
在这里,你可以这样做: