python - 我的 Python 代码中的这条 SQL 语句有什么问题?
问题描述
我正在开发一个简单的库存应用程序,它将管理硬件和软件库存。现在我只是想简单地将用户输入的数据输入到我的数据库中的文本框中。程序运行,但是当我输入文本并单击按钮输入数据时,光标会旋转一秒钟,然后应用程序关闭。有任何想法吗?我为 sql 语句尝试了多种格式。我曾在某一时刻得到它输入空白/空行的位置。打印功能只是为了确保我从文本框中检索数据。
from PyQt5.QtWidgets import (QLabel, QPushButton, QLineEdit, QApplication, QCheckBox, QMainWindow, QWidget,
QVBoxLayout, QTabWidget, QStatusBar)
import pyodbc
import sys
class mainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(385, 323)
self.setWindowTitle("HARDWARE | SOFTWARE MANAGER")
self.statusBar = QStatusBar()
self.setStatusBar(self.statusBar)
self.tabForm = QTabWidget()
self.tabForm.addTab(hardwareTab(), "HARDWARE")
self.tabForm.addTab(softwareTab(), "SOFTWARE")
self.setCentralWidget(self.tabForm)
class hardwareTab(QWidget):
def __init__(self):
super().__init__()
self.snLabel = QLabel("SERIAL NUMBER")
self.snTextBox = QLineEdit()
self.modelLabel = QLabel("MODEL")
self.modelTextBox = QLineEdit()
self.userLabel = QLabel("USER")
self.userTextBox = QLineEdit()
self.enButton = QPushButton("ENTER NEW HARDWARE")
self.cfButton = QPushButton("CLEAR FIELDS")
self.seButton = QPushButton("SEARCH/EDIT HARDWARE")
self.activeCheckbox = QCheckBox("ACTIVE")
self.testTextbox = QLineEdit()
layout = QVBoxLayout(self)
layout.addWidget(self.snLabel)
layout.addWidget(self.snTextBox)
layout.addWidget(self.modelLabel)
layout.addWidget(self.modelTextBox)
layout.addWidget(self.userLabel)
layout.addWidget(self.userTextBox)
layout.addWidget(self.activeCheckbox)
layout.addWidget(self.enButton)
layout.addWidget(self.cfButton)
layout.addWidget(self.seButton)
layout.addWidget(self.testTextbox)
self.enButton.clicked.connect(lambda: enterNewHardware(self))
class softwareTab(QWidget):
def __init__(self):
super().__init__()
self.snLabel = QLabel("SERIAL NUMBER / KEY")
self.snTextbox = QLineEdit()
self.nameLabel = QLabel("APPLICATION NAME")
self.nameTextBox = QLineEdit()
self.userLabel = QLabel("USER")
self.userTextBox = QLineEdit()
self.enButton = QPushButton("ENTER NEW SOFTWARE")
self.cfButton = QPushButton("CLEAR FIELDS")
self.seButton = QPushButton("SEARCH/EDIT SOFTWARE")
layout = QVBoxLayout(self)
layout.addWidget(self.snLabel)
layout.addWidget(self.snTextbox)
layout.addWidget(self.nameLabel)
layout.addWidget(self.nameTextBox)
layout.addWidget(self.userLabel)
layout.addWidget(self.userTextBox)
layout.addWidget(self.enButton)
layout.addWidget(self.cfButton)
layout.addWidget(self.seButton)
def enterNewHardware(textboxes):
serial_number = textboxes.snTextBox.text()
model_name = textboxes.modelTextBox.text()
user_name = textboxes.userTextBox.text()
test_textbox = textboxes.testTextbox.text()
print(serial_number)
print(model_name)
print(user_name)
print(test_textbox)
azureServer = "pythonserver6974.database.windows.net"
azureDB = "inventoryDatabase"
userName = "na"
password = "na"
driver = "{ODBC Driver 17 for SQL Server}"
connectionString = f"DRIVER={driver};SERVER={azureServer};PORT=1433;DATABASE={azureDB};UID={userName};PWD={password}"
conn = pyodbc.connect(connectionString)
cursor = conn.cursor()
sql_statement = 'INSERT INTO inventoryDatabase.dbo.Hardware (serialNumber, modelName, userName, machineActive) VALUES (?, ?, ?, ?)'
data = (serial_number, model_name, user_name, test_textbox)
cursor.execute(sql_statement, data)
conn.commit()
if __name__ == "__main__":
APP = QApplication(sys.argv)
WINDOW = mainWindow()
WINDOW.show()
sys.exit(APP.exec_())
解决方案
推荐阅读
- javascript - td 内的 div 正在重置 td 的宽度
- c - 自动显示输入面板,并保持输入集中在tizen上
- hyperledger-fabric - 什么是超级账本结构链文件?我在哪里可以买到?
- gemfire - geode oql 按字符串和 to_date 排序
- spring - java.lang.AssertionError: Status expected:<200> but was:<400> for Spring Boot Rest Controller Patch request
- java - 如何解析作为 REST 请求中的查询参数接收的函数?
- tensorflow - 如何将层添加到与检查点中的变量相关的预训练模型?
- kettle - PDI Kettle 表输入步骤如何加载数据?
- java - Java CookieManager 或 CookieHandler 过期了吗?
- machine-learning - 为图像集创建 LMDB