sqlite3.OperationalError:没有这样的表:MainData

时间:2019-03-02 05:23:51

标签: python sqlite

我正在尝试在python中使用sqlite3数据库,但出现以下错误:

Traceback (most recent call last):
  File "C:\Users\Angel\Desktop\Proyecto\Src_School_Admin\SchoolAdmin-Director.py", line 4, in <module>
    from execute_files.Sqlitedb import FirstUseInfo
  File "C:\Users\Angel\Desktop\Proyecto\Src_School_Admin\execute_files\Sqlitedb.py", line 17, in <module>
    FirstUseInfo()
  File "C:\Users\Angel\Desktop\Proyecto\Src_School_Admin\execute_files\Sqlitedb.py", line 12, in FirstUseInfo
    s = cursor.execute("SELECT Use FROM MainData")
sqlite3.OperationalError: no such table: MainData
[Finished in 0.2s]

FirstUseInfo函数位于以下路径的文件中:C:\Users\Angel\Desktop\Project\Src_School_Admin\execute_files与数据库一起

,发送来调用FirstUseInfo函数的文件位于C:\Users\Angel\Desktop\Project\Src_School_Admin

但是它不起作用会不断标记错误

First.py

from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5 import uic
from PyQt5 import QtCore
from execute_files.Sqlitedb import FirstUseInfo

class InitWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        #uic.loadUi("UIX/first.ui",self)

        #self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        #self.LStatus.setText("Cargando...")

        self.FirstUse()
        FirstUseInfo()

    def FirstUse(self):
        pass


app = QApplication([])
iw = InitWindow()
iw.show()
app.exec_()

Sqlitedb.py

import sqlite3
from PyQt5.QtWidgets import QMessageBox
import os

def FirstUseInfo():
    r = str(os.getcwd())
    final = r.replace("\\","/")
    result = None
    d=final+"/InfoDB.db"

    conexion = sqlite3.connect(d)
    cursor = conexion.cursor()
    s = cursor.execute("SELECT Use FROM MainData")
    for i in s:
        result = int(i[0])
    return print(result)
    conexion.close()
FirstUseInfo()

如果我从FirstUseInfo ()运行Sqlitedb.py没问题,但是如果我从另一侧执行它会抛出错误。

enter image description here

我意识到由于某种原因在目录C: \ Users \ Angel \ Desktop \ Project \ Src_School_Admin中创建了另一个数据库,该目录是发送来调用FirstUseInfo函数的文件所在的位置

2 个答案:

答案 0 :(得分:0)

  

但是如果我从另一侧执行它,则会抛出错误。

所以您的代码

r = str(os.getcwd())
final = r.replace("\\","/")
result = None
d=final+"/InfoDB.db"
每次从其他地方运行程序时,

都会提供新的文件名。 当你跑步 conexion = sqlite3.connect(d) SQLite没有看到数据库,而是在那里创建。

您应该对数据库文件的真实文件名进行一些修改。

答案 1 :(得分:0)

通过附加以下代码行来解决

r = os.path.dirname (__ file __)

source = r.replace ('\\'," / ") +" / InfoDB.db " 据我了解,这一行返回文件位置的绝对值