Python中SQLite3库.execute方法执行建表SQL报语法错误求助
错误原因
- 列名包含SQL语法不允许直接使用的特殊字符/空格:
AP RANK带空格、Y/A和AY/A带斜杠,这类标识符必须用反引号或双引号包裹才能作为合法的列名,你遇到的near "/": syntax error就是未包裹斜杠类列名导致的。 - 字段约束写错:
SCHOOL TEXT NON NULL中的NON是错误写法,正确的非空约束关键字是NOT。 - 外键定义逻辑错误:你设置的
FOREIGN KEY(NAME) REFERENCES qb(NAME)是引用自身表的NAME字段,但NAME字段既不是主键也没有设置唯一约束,不符合SQLite外键规则,这个多余的外键定义建议删除。 - 补充:原代码里
print(qb.head)未加括号,打印的是方法对象而非前几行数据,建议改为print(qb.head())。
修正后的完整代码
import numpy as np import pandas as pd import sqlite3 as sqlite3 qb = pd.read_excel('d:/2021_College_QB_Week_3.xlsx', sheet_name = '2021_College_QB_Week_3', header = 0) print(qb.head()) db_conn = sqlite3.connect("d:/2021_College_Stats.db") c = db_conn.cursor() c.execute( """ CREATE TABLE qb( `AP RANK` INTEGER, NAME TEXT NOT NULL, GAME INTEGER, CMP INTEGER, ATT INTEGER, PCT FLOAT, YDS INTEGER, `Y/A` FLOAT, `AY/A` FLOAT, TD INTEGER, INT INTEGER, RATE FLOAT, SCHOOL TEXT NOT NULL, YEAR INTEGER, PRIMARY KEY(SCHOOL) ); """ ) # 如需直接把读取的Excel数据写入表,可添加下方这行代码 qb.to_sql("qb", db_conn, if_exists="append", index=False) # 操作完成后提交更改并关闭连接 db_conn.commit() db_conn.close()
内容的提问来源于stack exchange,提问作者Tim O'Rourke
相关产品推荐
相关产品推荐

