首页 > 解决方案 > sqlite3.OperationalError:没有这样的表:page2

问题描述

我正在尝试将名为 page2 的表的内容写入另一个名为 page3 的表,但我不断收到 sqlite3.OperationalError: no such table: page2 尽管所有数据库和文件都在同一个目录中。我尝试了很多网上看到的东西。当我使用 sqlite 浏览器时,它会看到表格:page2。

from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.app import App
from kivy.lang import Builder
from kivy.properties import ObjectProperty
from kivy.uix.button import Button
import sqlite3 as sql

# Paths
path = 'C:\\Users\\USA GADGETS\\PycharmProjects\\App\\first_page.db'
path1 = 'C:\\Users\\USA GADGETS\\PycharmProjects\\App\\second_page.db'
path2 = 'C:\\Users\\USA GADGETS\\PycharmProjects\\App\\third_page.db'
path3 = 'C:\\Users\\USA GADGETS\\PycharmProjects\\App\\fourth_page.db'
path4 = 'C:\\Users\\USA GADGETS\\PycharmProjects\\App\\fifth_page.db'

# connections
conn = sql.connect(path) # conect to first page database
conne = sql.connect(path1)# conect to second page database
connec=sql.connect(path2) # conect to third page database
fourth_page_connec = sql.connect(path3) # conect to fourth page database
fifth_page_connec = sql.connect(path4) # conect to fifth page database

# Cursor
cur = conn.cursor() # First page cursor
curs = conne.cursor() # Second page cursor
curso=connec.cursor() # Third page cursor
cursoo=fourth_page_connec.cursor() # Fourth page cursor
cursoor=fifth_page_connec.cursor() # Fifth page cursor

# pass a query
cur.execute(""" CREATE TABLE IF NOT EXISTS page1(Month)""") # First Page Query
conn.commit() # First Page commit
curs.execute("""CREATE TABLE IF NOT EXISTS page2(Items)""") # Second Page Query
conne.commit() # # Second Page commit
curso.execute("""CREATE TABLE IF NOT EXISTS page3(Description text,Amount REAL)""") # Third Page    Query
connec.commit() # Third Page Commit
cursoo.execute(""" CREATE TABLE IF NOT EXISTS page4(Description text,Amount REAL)""")
fourth_page_connec.commit()
cursoor.execute(""" CREATE TABLE IF NOT EXISTS page5(Description text,Amount REAL)""")
fifth_page_connec.commit()

# Close connection

conn.close()
conne.close()
connec.close()
fourth_page_connec.close()
fifth_page_connec.close()


# declaration of properties to modify objects from my.kv
finances= ObjectProperty()
month=ObjectProperty()
jan_action=ObjectProperty()
feb_action=ObjectProperty
mar_action=ObjectProperty()
apr_action=ObjectProperty
may_action=ObjectProperty()
jun_action=ObjectProperty
jul_action=ObjectProperty()
aug_action=ObjectProperty
sep_action=ObjectProperty()
oct_action=ObjectProperty
nov_action=ObjectProperty()
dec_action=ObjectProperty

# declaration of properties of second page
income_action=ObjectProperty()
budget_action=ObjectProperty
event_action=ObjectProperty()
analysis_action=ObjectProperty
report=ObjectProperty()

class FirstScreen(Screen):
    def call_back(self,instance):

    conn = sql.connect("first_page.db")

    # Cursor
    cur = conn.cursor()

    # pass a query
    cur.execute("""INSERT INTO page1(
                Month) VALUES (?)""",(instance.text,))

    # commit
    conn.commit()
    # Close connection

    conn.close()


class SecondScreen(Screen):
    def call_back(self, instance):
    conne = sql.connect("second_page.db")

    # Cursor
    curs = conne.cursor()

    # pass a query

    curs.execute("""INSERT INTO page2(
                        items) VALUES (?)""", (instance.text,))
    conne.commit()
    curs.fetchall()

    # committ
    conne.commit()
    # Close connection

    conne.close()


class ThirdScreen(Screen):
    desc_action = ObjectProperty()
    amount_action = ObjectProperty()

    def getFromIncome(self):
        connec = sql.connect("third_page.db")

    # Cursor
        curso = connec.cursor()

    # pass a query
    curso.execute("""INSERT INTO page3(
                Description,Amount) VALUES (?,?)""", (self.desc_action.text,self.amount_action.text,))
    connec.commit()

    curso.execute(""" INSERT INTO page3 SELECT Items FROM page2""") # This is where error is comingfrom
    # commit
    connec.commit()
    # Close connection

    connec.close()

class FourthScreen(Screen):
    budget_input_1 = ObjectProperty()
    budget_input_2 = ObjectProperty()

    def getFromBudget(self):
        fourth_page_connec = sql.connect("fourth_page.db")

        # Cursor
        cursoo = fourth_page_connec.cursor()

        # pass a query
        # curso.execute("""ATTACH DATABASE third_page AS page3""")
        cursoo.execute("""INSERT INTO page4(
                    Description,Amount) VALUES (?,?)""",
                   (self.budget_input_1.text, self.budget_input_2.text,))

        #cursoo.execute(""" SELECT * FROM first_page.db CROSS JOIN third_page.db""")

        # committ
        fourth_page_connec.commit()
        # Close connection

        fourth_page_connec.close()

class FifthScreen(Screen):
    event_input_1 = ObjectProperty()
    event_input_2 = ObjectProperty()

    def getFromEvent(self):
        fifth_page_connec = sql.connect("fifth_page.db")

    # Cursor
        cursoor = fifth_page_connec.cursor()

        # pass a query
    
        cursoor.execute("""INSERT INTO page4(
                    Description,Amount) VALUES (?,?)""", (self.event_input_1.text, self.event_input_2_input_2.text,))
    
        #cursoor.execute(""" SELECT * FROM first_page.db CROSS JOIN third_page.db""")

        # committ
        fifth_page_connec.commit()
    # Close connection

        fifth_page_connec.close()

class FinalScreen(Screen):
    pass


class UserIncomePage(Screen):
    pass

class WindowManager(ScreenManager):
    pass


kv=Builder.load_file("my.kv")

class MyApp(App):
    def build(self):
        return kv

MyApp().run()

标签: sqlitekivypython-3.7kivy-language

解决方案


在执行该INSERT语句之前,您必须附加包含该表的数据库page2

curso.execute("ATTACH DATABASE 'databasename.db' AS db2")

替换'databasename.db'为要附加的数据库的完整路径和数据库名称和扩展名。
如果此路径存储在变量中,path1那么通过提供列 page3 的名称,Description of 项目where the value of the columnpage2`of将被存储:

curso.execute("ATTACH DATABASE '" + path1 + "' AS db2")

然后像这样执行INSERT语句:

curso.execute("INSERT INTO page3 (Description) SELECT Items FROM db2.page2")

推荐阅读