sqlite3.OperationalError: рядом с ")": синтаксическая ошибка в tkinter Python - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь создать базу данных с использованием sqlite в python в моем приложении tkinter - я следовал руководству, которое использовал раньше, и набирал текст правильно, как и он, однако я продолжаю получать ошибку, которую не могу решить - код ниже.

ошибка: c .execute ("" "CREATE TABLE jobdata (sqlite3.OperationalError: near") ": синтаксическая ошибка

import tkinter as tk 
from tkinter import ttk
from tkinter import *
import sqlite3
   
  
LARGEFONT =("Verdana", 35) 


conn = sqlite3.connect('jobtracker.db')

c = conn.cursor()

c.execute("""CREATE TABLE jobdata (
            company text,
            role text,
            industry text,
            location text,
            wage integer,
            start_date integer,
            )""")

conn.commit()

conn.close()

Я поместил это в верхней части моего кода над моими классами, которые я создал для своего GUI - я могу опубликовать остальной код, если потребуется. Я много раз просматривал синтаксис и обнаружил, что он не отличается от того, как в учебнике написал это. Любая помощь будет принята с благодарностью!

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Устранение ошибки

За последним полем в определении вашей таблицы стоит запятая, вероятно, это вызывает ошибку.

start_date integer, следует обновить на start_date integer.

Устранение будущих ошибок

Я также рекомендовал бы вам добавить условие IF NOT EXISTS в свой оператор, если вы собираетесь запускать файл, содержащий этот скрипт, несколько раз. Если вам удастся создать таблицу, а затем попытаться запустить оператор, который создаст таблицу с тем же именем, вы, скорее всего, получите следующую ошибку: sqlite3.OperationalError: table jobdata already exists.

Предлагаемое решение # 1

# Your existing code as is before CREATE TABLE statement 
c.execute("""CREATE TABLE IF NOT EXISTS jobdata (
            company text,
            role text,
            industry text,
            location text,
            wage integer,
            start_date integer
            );""")
# Your existing code as is after CREATE TABLE statement

Менеджеры контекста

Возможно, стоит подумать об использовании диспетчера контекста при выполнении транзакций БД с использованием соединения sqlite3 ( см. Документы ).

Я считаю они полезны с точки зрения удобочитаемости и безопасности, они автоматически фиксируют / откатывают транзакции - это означает, что забыть запустить conn.commit() не стоит беспокоиться.

Очевидно, есть случаи, когда вы можете не захотеть использовать диспетчер контекста , однако это похоже на solid кандидата на его использование, просто подумал, что этим стоит поделиться с вами, если вы не знаете об этой функции.

Пример кода из вашего исходного вопроса с использованием диспетчера контекста для обработки транзакция базы данных ниже (включая изменения, внесенные в прямой ответ на вопрос выше):

Предлагаемое решение №2 * 1 032 * import tkinter as tk from tkinter import ttk from tkinter import * import sqlite3 LARGEFONT =("Verdana", 35) conn = sqlite3.connect('jobtracker.db') with conn: conn.execute("""CREATE TABLE IF NOT EXISTS jobdata ( company text, role text, industry text, location text, wage integer, start_date integer );""") conn.close()

0 голосов
/ 03 августа 2020

Эй, вы делаете ошибку, вы добавляете лишнее , в последнюю из

c.execute("""CREATE TABLE jobdata (
            company text,
            role text,
            industry text,
            location text,
            wage integer,
            start_date integer, )""")#here you are using the extra ```,```  

правильную

c.execute("""CREATE TABLE jobdata (
            company text,
            role text,
            industry text,
            location text,
            wage integer,
            start_date integer)""") #remove the coma 
...