sqlite SQLlite:为什么插入SQL语句不更新数据库中的表?

gmxoilav  于 2023-01-31  发布在  SQLite
关注(0)|答案(1)|浏览(271)

我有一个连接到SQL Lite数据库的Python Pysimplegui表单。
创建和更新名为fitness_class的表的函数为:

def createFitnessClassTable(conn):
    '''

    '''
    SQL = """CREATE TABLE IF NOT EXISTS fitness_class (
            fitness_class_id integer PRIMARY KEY, 
            fitness_class_name text NOT NULL,
            date_and_time text NOT NULL     
        );"""
    sql_create = """INSERT OR IGNORE INTO fitness_class(fitness_class_id,fitness_class_name,date_and_time)
    VALUES(?,?,?)"""
    data = [
        (1, 'Cardio', 'Thursday 35pm'),
        (2, 'Pilates', 'Friday 911am'),
        (3, 'Spin', 'Monday 2 4pm')
    ]
    try:
        c = conn.cursor()
        c.execute(SQL)
        c.close()
        connection = conn.cursor()
        connection.executemany(sql_create, data)

        connection.close()

    except Error as e:
        # print(e)
        sg.Popup(e)
        return False

    return True

当调用函数时,这是在创建表,我没有收到任何错误消息。但是,这也没有保存数据(来自insert语句)。

#!/usr/bin/python
import os
import PySimpleGUI as sg
from tkinter import *
import re
import sys
import PySimpleGUI as sg
import sqlite3

sys.path.append(os.path.dirname(__file__))
conn = dbconnect()
createFitnessClassTable(conn=conn)
conn.commit
conn.close()

我很困惑,因为我有一个类似的功能来创建另一个工作正常的表(即创建表,如果它不存在,并填充数据):

def createMembershipTable(conn):
    '''

    '''
    SQL = """
        CREATE TABLE IF NOT EXISTS membership (
            membership_type_id integer PRIMARY KEY, 
            membership_type text NOT NULL,
            weekly_amount real NOT NULL     
        );"""

    sql_create = """INSERT OR IGNORE INTO membership(membership_type_id,membership_type,weekly_amount)
    VALUES(?,?,?)"""
    data = [(1, 'Basic', 10.00),
            (2, 'Regular', 15.00),
            (3, 'Premium', 20.00)

            ]

    try:
        c = conn.cursor()
        c.execute(SQL)
        c.close()
        connection = conn.cursor()
        connection.executemany(sql_create, data)
        connection.close()
    except Error as e:
        print(e)
        return False
    return True

调用该函数的行:

conn = dbconnect()
 createMembershipTable(conn)
 conn.commit()
 conn.close()

我错过了什么?为什么函数createMembershipTable会按预期工作,而函数createFitnessClassTable在两者几乎相同的情况下不工作?

t9aqgxwy

t9aqgxwy1#

我觉得自己像个白痴。刚发完帖子(之前浪费了3个小时),我就意识到了这个问题:createFitnessClassTable函数调用中的conn.commit**()**后缺少括号。

相关问题