【问题标题】:Cannot resolve logical: syntax error for sql无法解析逻辑:sql 的语法错误
【发布时间】:2022-01-08 15:45:51
【问题描述】:

不知道如何纠正这个逻辑语法错误,不胜感激!

回溯(最近一次通话最后一次):
文件“c:\Users\M\Desktop\Coding\Course4wk4sql.py”,第 7 行,在
cur.executescript(''' sqlite3.OperationalError:靠近“#logical”:语法错误
PS C:\Users\M\Desktop\Coding> sqlite3.OperationalError: near "#logical": 语法错误

代码如下:

import json
import sqlite3

conn = sqlite3.connect ('rosterdb.sqlite')
cur = conn.cursor()

cur.executescript('''
    DROP TABLE IF EXISTS User;
    DROP TABLE IF EXISTS Member;
    DROP TABLE IF EXISTS Course;
    CREATE TABLE User (
        id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
        name TEXT UNIQUE #logical key
);
    CREATE TABLE Course (
        id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
        title TEXT UNIQUE
);

    CREATE TABLE Member (
        user_id  INTEGER,
        course_id INTEGER,
        role INTEGER,
        PRIMARY KEY (user_id, course_id) #Going to force combination of these two to be unique
)
''')

filename = "roster_data.json"
jsondata = open(filename)
data = json.load(jsondata)

for entry in data:
   
    user = entry[0]
    course = entry[1]
    instructor = entry[2]

user_statement = """INSERT OR IGNORE INTO User(name) VALUE 9 ? )"""
SQLparams = (user, )
cur.execue(course_statement, SQLparams)

course_statement = """INSERT OR IGNORE INTO Course(title) VALUES ( ? )"""
sqlparams = (course, )
cur.execute(course_statement, SQLparams)

courseID_statement = """SELECT id FROM Course WHERE title = ?"""
SQLparams = (course, )
cur.execute(courseID_statement. SQLparams)
courseID =cur.fetone()[0]

userID_statement = """SELECT id FROM User WHERE name = ?"""
SQLparams = (user, )
cur.execute(userID_statement, SQLparams)
userID = cur.fetchone()[0]

member_statement = """INSERT INTO Member(user_id, course_id, role)
    VALUES(?, ?, ?)"""
SQLparams = (userID, courseID, instructor)
cur.execute(member_statement, SQLparams)

conn.commit()

test_statement = """
SELECT hex(User.name || Course.title || Member.role ) AS X FROM 
    User JOIN Member JOIN Course 
    ON User.id = Member.user_id AND Member.course_id = Course.id
    ORDER BY X
"""
cur.execute(test_statement)
result = cur.fetchone()
print("RESULT: " + str(result))

#Closing the connection
cur.close()
conn.close()

【问题讨论】:

    标签: sql database many-to-many


    【解决方案1】:

    您在 sql 脚本中使用了非 sql 样式的 cmets,例如 #logical key。而# 用于在python 中进行评论,--/* multi line comment */ 通常用于sqlite comments

    因此,您会遇到语法错误。您可以删除这些 python 样式的 cmets 或尝试用 sqlite 样式的 cmets 替换它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      相关资源
      最近更新 更多