خطای عدم‌ وجود جدول هنگام ایجاد رکورد در Sqlite3

import sqlite3 as db

from datetime import datetime

conn = db.connect('database.db')

c = conn.cursor()

def init():

    c.execute(' CREATE TABLE IF NOT EXISTS expenses (amount REAL ,category TEXT COLLATE NOCASE , mesage TEXT COLLATE NOCASE ,datee TEXT)')

    conn.commit()

    conn.close()


    #add new iteam to date base

def add (amount , category , mesage = '') :

    datee = str (datetime.now().strftime ('%Y - %M - %D | %H:%M'))

@@@@@@@@@@@@@@@@@
c.execute (‘INSERT INTO expenses VALUES (:amount , :category , :mesage , :datee)’ , { ‘amount’ : amount ,‘category’ : category , ‘mesage’ : mesage , ‘datee’ : datee })
@@@@@@@@@@@@@@@@@
conn.commit()

    conn.close()


def show (category = None) :

    #show the all date base

    if category:

        c.execute ('SELECT * FROM expenses WHERE category = (:category)' , {'category' : category})

        results = c.fetchall()

        c.execute ('SELECT sum(amount) FROM expenses WHERE category = (:category)' , {'category' : category})

        total_amount = c.fetchone()[0] 

    else:

        c.execute ('SELECT * FROM expenses')

        results = c.fetchall()

        c.execute ('SELECT sum (amount) FROM expenses')

        total_amount = c.fetchone()[0]

    return total_amount , results

    conn.close()

  **


**

پیغام خطا میده ولی خطا پیدا نمیکنم
کسی میدونه ایا خطا من در کجاست

زمانی که میخواهم ایتم بدم بره تو دیتا بیس ارور میدهد
line 17, in add

c.execute ('INSERT INTO expenses VALUES (:amount , :category , :mesage , :datee)' , { 'amount' : amount ,'category' : category  , 'mesage' : mesage , 'datee' : datee })

sqlite3.OperationalError: no such table: expenses

این روش صحیحی برای سوال پرسیدن در کامیونیتی نیست.
لطفا عنوان تاپیک رو تغییر بدید و شفافترش کنید و بیشتر توضیح بدید که مشکل دقیقا چی هست و چه راههایی رو امتحان کردید و قبل از پرسیدن این سوال، چه لینکهایی رو بررسی کردید.


همچنین نسخه‌ی سیستم‌عامل و نسخه‌ی پایتون و لایبرریهایی که استفاده میکنید هم مشخص کنید.

چند تا سایت سرچ کردم ولی مشکل خطا را پیدا نکردم

تازه دیتا بیس شروع کردم

ویندوز 10
پایتون 3.8

من تیترشو درست میکنم

1 پسندیده

دوست عزیز بنظر میاد جدول مورد نظر در دیتابیس شما وجود نداره و لازمه که اول درستش کنید

فکر میکنم تنها مشکل این باشه که کانکشن رو میبندید و بعد میخواید insert یا select کنید. چون اروری که به من میده اینه:

  File "main.py", line 49, in show
    c.execute ('SELECT * FROM expenses')
sqlite3.ProgrammingError: Cannot operate on a closed database.

البته یه مقدار ویرایش دیگه هم انجام دادم. مثلا توی ساخت کوئری به جای ' از و استفاده کردید که اینم ارور میده.

به هرحال، هر زمان که conn.close() اجرا میشه، کانکشن بسته میشه و بعد باید دوباره بازش کنید اگه میخواید چیزی در دیتابیس ذخیره کنید یا ازش چیزی رو بخونید. (یا کانکشن رو نبندید تا کارتون تموم بشه، یا برا هربار استفاده دوباره باید بسازیدش)

1 پسندیده

سلام من مشکل حل کردم

ولی سرویس شدم

48 ساعت مدام کار کردم چک کردم مهم نیست مشکل حل کردم این برنامه حسابداری خیلی خیلی پیش افتاده ضعیف

حالا کد میذارم که دیگرانم استفاده کنند

https://paste.ubuntu.com/p/nj28xxhn6Z/

2 پسندیده

با برنامه اسپایدر اخری باز کردم که کمی از مشکل فهمیدم
یکی sql بود یکی یک فاصله space

خیلی ممنون که کد صحیحی رو به اشتراک گذاشتید ولی لطفا پست رو ویرایش کنید و کدها رو به یه pastebin منتقل کنید و لینکش رو اینجا قرار بدید. مثلا میتونید از سرویس pastebin.com یا paste.ubuntu.com استفاده کنید.
اینطوری کدها خواناتر و قابل استفاده تر خواهند بود.

1 پسندیده

راه سریع و آسون استفاده از ORM هست

Peewee is a simple and small ORM

from peewee import *
import datetime


db = SqliteDatabase('my_database.db')

class BaseModel(Model):
    class Meta:
        database = db

class User(BaseModel):
    username = CharField(unique=True)

class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')
    message = TextField()
    created_date = DateTimeField(default=datetime.datetime.now)
    is_published = BooleanField(default=True)
db.connect()
db.create_tables([User, Tweet])

سلام
بنده هم همچین مشکلی رو دارم
و هر کاری میکنم اوکی نمیشه
سورسی هم که گذاشتی رو کپی کردم
اما همچنان حل نمیشه
دقیقا مشکلش چیه؟ (برای منم همون از insert into ) اما خب…