<p><code>CREATE TABLE</code>语句的正确语法为:</p>
<pre><code>CREATE TABLE tablename(column1 datatype1, column2 datatype2, ....)
</code></pre>
<p>由于您希望用户提供表的名称,因此可以使用字符串插值,因为您不能在sql查询中将<code>?</code>占位符作为参数传递:</p>
<pre><code>tb_create = f"CREATE TABLE [{TableName}](ID INTEGER PRIMARY KEY, title TEXT, forename TEXT, surname TEXT)"
</code></pre>
<p>表格的名称必须括在方括号内,以防用户提供的名称无效(例如以数字开头或包含空格)。<br/>
此外,如果希望列<code>ID</code>自动递增,则必须使用<code>INTEGER</code>而不是<code>INT</code>作为其数据类型。<br/>
此外,SQLite中没有<code>VARCHAR</code>数据类型。使用<code>TEXT</code>。<br/></p>
<p>您可以将变量<code>TableName</code>定义为全局变量,以便在所有函数中使用它,如<code>insert_data()</code>。<br/>
对<code>INSERT</code>语句也使用字符串插值</p>
<pre><code>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()
</code></pre>