本文目录导读:

可以使用脚本批量创建SQLite表,以下是几种常见的方法:
使用SQL脚本文件(最基础)
创建一个SQL文件,包含所有表的CREATE语句:
create_tables.sql
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
product TEXT NOT NULL,
amount REAL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL,
stock INTEGER DEFAULT 0
);
然后执行:
sqlite3 database.db < create_tables.sql
Python脚本(推荐)
import sqlite3
def create_tables():
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
tables_sql = [
"""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""",
"""
CREATE TABLE IF NOT EXISTS orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
product TEXT NOT NULL,
amount REAL,
FOREIGN KEY (user_id) REFERENCES users(id)
)
""",
"""
CREATE TABLE IF NOT EXISTS products (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price REAL,
stock INTEGER DEFAULT 0
)
"""
]
for sql in tables_sql:
cursor.execute(sql)
print(f"Table created successfully")
conn.commit()
conn.close()
print("All tables created!")
if __name__ == "__main__":
create_tables()
从配置文件生成(可扩展性强)
config.json
{
"tables": {
"users": {
"columns": {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"name": "TEXT NOT NULL",
"email": "TEXT UNIQUE",
"created_at": "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"
}
},
"orders": {
"columns": {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"user_id": "INTEGER",
"product": "TEXT NOT NULL",
"amount": "REAL"
},
"foreign_keys": [
"FOREIGN KEY (user_id) REFERENCES users(id)"
]
},
"products": {
"columns": {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"name": "TEXT NOT NULL",
"price": "REAL",
"stock": "INTEGER DEFAULT 0"
}
}
}
}
generate_tables.py
import json
import sqlite3
def generate_create_sql(table_name, table_config):
columns = []
for col_name, col_type in table_config['columns'].items():
columns.append(f"{col_name} {col_type}")
if 'foreign_keys' in table_config:
columns.extend(table_config['foreign_keys'])
columns_str = ",\n ".join(columns)
return f"CREATE TABLE IF NOT EXISTS {table_name} (\n {columns_str}\n)"
def create_tables_from_config(config_file):
with open(config_file, 'r') as f:
config = json.load(f)
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
for table_name, table_config in config['tables'].items():
sql = generate_create_sql(table_name, table_config)
cursor.execute(sql)
print(f"Created table: {table_name}")
conn.commit()
conn.close()
print("All tables created from configuration!")
if __name__ == "__main__":
create_tables_from_config('config.json')
从CSV文件批量创建表
import sqlite3
import csv
import os
def create_tables_from_csv(csv_folder):
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
for filename in os.listdir(csv_folder):
if filename.endswith('.csv'):
table_name = filename.replace('.csv', '')
with open(os.path.join(csv_folder, filename), 'r') as f:
reader = csv.reader(f)
headers = next(reader)
# 创建列定义(所有列默认为TEXT类型)
columns = []
for header in headers:
columns.append(f"{header} TEXT")
columns_str = ",\n ".join(columns)
sql = f"CREATE TABLE IF NOT EXISTS {table_name} (\n {columns_str}\n)"
cursor.execute(sql)
print(f"Created table: {table_name}")
conn.commit()
conn.close()
if __name__ == "__main__":
create_tables_from_csv('./csv_files')
批量创建并初始化的完整示例
import sqlite3
from typing import Dict, List
class SQLiteTableManager:
def __init__(self, db_path: str):
self.db_path = db_path
self.conn = None
self.cursor = None
def connect(self):
self.conn = sqlite3.connect(self.db_path)
self.cursor = self.conn.cursor()
def close(self):
if self.conn:
self.conn.close()
def create_tables(self, tables: Dict[str, Dict]) -> List[str]:
"""
tables格式:
{
'table_name': {
'columns': { 'col_name': 'col_type', ... },
'foreign_keys': ['FOREIGN KEY ...', ...] # 可选
}
}
"""
created_tables = []
for table_name, table_config in tables.items():
try:
columns = []
for col_name, col_type in table_config['columns'].items():
columns.append(f"{col_name} {col_type}")
if 'foreign_keys' in table_config:
columns.extend(table_config['foreign_keys'])
columns_str = ",\n ".join(columns)
sql = f"CREATE TABLE IF NOT EXISTS {table_name} (\n {columns_str}\n)"
self.cursor.execute(sql)
created_tables.append(table_name)
print(f"✓ Created table: {table_name}")
except Exception as e:
print(f"✗ Failed to create table {table_name}: {e}")
self.conn.commit()
return created_tables
def table_exists(self, table_name: str) -> bool:
self.cursor.execute(
"SELECT name FROM sqlite_master WHERE type='table' AND name=?",
(table_name,)
)
return self.cursor.fetchone() is not None
# 使用示例
if __name__ == "__main__":
tables_config = {
'users': {
'columns': {
'id': 'INTEGER PRIMARY KEY AUTOINCREMENT',
'username': 'TEXT NOT NULL UNIQUE',
'email': 'TEXT NOT NULL',
'password_hash': 'TEXT NOT NULL',
'created_at': 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP'
}
},
'posts': {
'columns': {
'id': 'INTEGER PRIMARY KEY AUTOINCREMENT',
'user_id': 'INTEGER NOT NULL',
'title': 'TEXT NOT NULL',
'content': 'TEXT',
'created_at': 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP'
},
'foreign_keys': [
'FOREIGN KEY (user_id) REFERENCES users(id)'
]
},
'comments': {
'columns': {
'id': 'INTEGER PRIMARY KEY AUTOINCREMENT',
'post_id': 'INTEGER NOT NULL',
'user_id': 'INTEGER NOT NULL',
'content': 'TEXT NOT NULL',
'created_at': 'TIMESTAMP DEFAULT CURRENT_TIMESTAMP'
},
'foreign_keys': [
'FOREIGN KEY (post_id) REFERENCES posts(id)',
'FOREIGN KEY (user_id) REFERENCES users(id)'
]
}
}
manager = SQLiteTableManager('my_database.db')
manager.connect()
created = manager.create_tables(tables_config)
print(f"\nSuccessfully created {len(created)} tables")
# 检查表是否存在
for table in ['users', 'posts', 'comments']:
exists = manager.table_exists(table)
print(f"Table '{table}' exists: {exists}")
manager.close()
选择建议
- 小型项目:直接使用SQL脚本文件
- 中型项目:使用Python脚本,易于维护和扩展
- 大型项目:从配置文件生成,便于管理和版本控制
- 数据导入:从CSV文件自动创建
这些方法都可以批量创建SQLite表,你可以根据项目需求选择最合适的方案。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播