sqlite3.OperationalError: рядом с «show»: синтаксическая ошибка - PullRequest
0 голосов
/ 13 января 2020

Я строю таблицу в pyqt5, которая покажет вывод SQL в таблице. Сначала вы должны ввести команду в командной строке, а затем нажать кнопку, чтобы обновить таблицу.

Хотя такие команды, как insert into table, работают, но когда я набираю show databases; в командной строке, я вижу эту ошибку:

Traceback (most recent call last):
  File "c:/Users/intel/Desktop/table.py", line 24, in load_data
    result = connection.execute(inp)
sqlite3.OperationalError: near "show": syntax error

Вот мой код :

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QAction, QTableWidget,QTableWidgetItem,QVBoxLayout
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import pyqtSlot
from PyQt5 import QtWidgets
import sqlite3

inp = input('>> ')

class App(QWidget):
    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 table - pythonspot.com'
        self.left = 0
        self.top = 0
        self.width = 300
        self.height = 200
        self.initUI()
#CREATE TABLE employees(email varchar(30), password(30));
    def load_data(self):
        connection = sqlite3.connect('my_db.db')
        #connection.execute(inp)
        #
        result = connection.execute(inp)
        self.tableWidget.setRowCount(0)

        for row_number, row_data in enumerate(result):
            self.tableWidget.insertRow(row_number)
            for column_number, data in enumerate(row_data):
                self.tableWidget.setItem(row_number, column_number, QTableWidgetItem(str(data)))

        connection.close()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.createTable()

        # Add box layout, add table to box layout and add box layout to widget
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget) 
        self.setLayout(self.layout) 

        self.btn = QtWidgets.QPushButton(self)
        self.btn.move(100,600)
        self.btn.setText("Hello")
        self.btn.clicked.connect(self.load_data)
        # Show widget
        self.show()

    def createTable(self):

        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(1) ##set number of rows 
        self.tableWidget.setColumnCount(8) ##this is fixed for myTableWidget, ensure that both of your tables, sql and qtablewidged have the same number of columns 


        self.tableWidget.move(1,1)

        # table selection change
        self.tableWidget.doubleClicked.connect(self.on_click)

    @pyqtSlot()
    def on_click(self):
        print("\n")
        for currentQTableWidgetItem in self.tableWidget.selectedItems():
            print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_()) 

Любая помощь будет оценена !!

1 Ответ

1 голос
/ 13 января 2020

В SQLite нет команды show databases, потому что обычно она только одна. Однако существует PRAGMA database_list database_list . Это перечислит основную базу данных и все присоединенные базы данных (как прикреплено, используя ATTACH DATABASE 'path_to_the_database' the_schema) ATTACH .

например PRAGMA database_list;: -

seq name    file
0   main    E:\Navicat\SQlite Databases\soanswers.db
2   sw      E:\Navicat\SQlite Databases\xxx.db  
  • name - это имя схемы, используемой при присоединении базы данных.

В противном случае это будет случай поиска в файловой системе или ее части, возможно, при проверке первых 16 байтов. файла для «SQLite формата 3 \ 000» database_header , если вы хотите найти файлы базы данных SQLite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...