基于 python 的数据库简单开发实验

基于 python 的简单数据库应用程序开发总结


前言

在大三上数据库课时需要做基于数据库的 C/S 和 B/S 的简单应用,对之前一直接触命令行黑框框的笔者来说,需要临时学习不少新的技术。实际最后的开发非常简单,只是在前期选定技术和查找文档的过程中费了一些精力,最后也有不少收获。因此在这最后做一份小笔记。



整体开发环境

环境
服务器操作系统Windows 10
数据库服务器MicroSoft SQL Server 2019 Developer
客户端操作系统Windows 10
客户端环境Python 3.8.0、PySide2 5.15.2
ODBCpyodbc 4.0.30
Web后端服务器Django 3.0.310、django-mssql-backend 2.8.1

看了一下,除了mssql,应该都具有良好的跨平台性。

Tips:
笔者使用时是2020 12月份,当时最新的 Django 版本是 3.0.311,但这个版本在执行 migration 时有 bug,因此最后选择了较低版本的Django。
Qt 的 python 接口 PySide 或 PyQt5 都对 python版本有要求,不能过低,在前期实现demo的时候,多次尝试之下,最后选定 python 3.8+。




大致架构

在这里插入图片描述

  • DB,选用的数据库软件
  • DBMS,选用的数据库管理软件
  • DBMS script or GUI,通过 DBMS 提供的执行脚本或GUI方式操作数据库
  • odbc,一个通过其他软件与 DBMS 或 DB 连接的 API
  • client,客户端软件
  • web server,web 服务器端软件




ODBC

用于连接程序员编写的程序和数据库的技术。

ODBC(Open Database Connectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问数据库管理系统(DBMS)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC的设计者们努力使它具有最大的独立性和开放性。

---- https://zh.wikipedia.org/wiki/ODBC

官方ODBC只是一个设计,在各个语言或技术上还需要具体实现。
在 python 上有多种ODBC实现,比如针对各个数据库实体实现的各个模块PymssqPyMySqlPySqllite 等,或各个模块通用的pyodbc。本次采用的是 pyodbc



具体的 pyodbc 使用可以参照 Documentation

本文给出一个具体的在本地连接 mssql 的实例程序:

# pyodbc 模块导入
import pyodbc

# server = 'localhost\sqlexpress' # for a named instance
# server = 'myserver,port' # to specify an alternate port
server = 'localhost' 

# 要连接的数据库名字
database = 'TEST' 

# 用于登录的用户名
username = 'tester' 

# 用于登录的用户密码
password = 'tester' 

# 创建连接
sql_connect = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

# 创建 cursor
cursor = sql_connect.cursor()

# 通过 cursor 执行 sql 语句
cursor.execute("SELECT @@version;") 

# print 执行结果
row = cursor.fetchone() 
while row: 
    print(row[0])
    row = cursor.fetchone()

# 关闭连接
sql_connect.close()

程序运行结果:

Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) 
        Sep 24 2019 13:48:23
        Copyright (C) 2019 Microsoft Corporation
        Developer Edition (64-bit) on Windows 10 Home China 10.0 <X64> (Build 19042: )

Tips:
记得开启 Sql Server 的通过用户名登录,以及 Tcp/IP 访问。




PySide2

PySide2 用于实现 python 的图形化界面。

Qt

Qt is the faster, smarter way to create innovative devices, modern UIs & applications for multiple screens. Cross-platform software development at its best.

---- https://www.qt.io/

PySide2

PySide2 is the official Python module from the Qt for Python project, which provides access to the complete Qt 5.12+ framework.

---- https://pypi.org/project/PySide2/

PySide2的具体开发可以参照Qt for Python Tutorials
本文中给出一个简单的实例GUI程序的代码:

import sys
from PySide2.QtCore import Slot, Qt
from PySide2.QtGui import QKeySequence, QFont
from PySide2.QtWidgets import QApplication, QMainWindow, QAction, QPushButton, QVBoxLayout ,QTableWidget, QTableWidgetItem, QWidget, QDockWidget



class My_table(QTableWidget):
    def __init__(self, width=500, hight=0, rows=100, cols=100):
        super(My_table, self).__init__(rows, cols)
        # reisze
        hight = width*0.618
        self.resize(width, hight)
        # initial all of the tabel_item
        for i in range(self.rowCount()):
            for j in range(self.columnCount()):
                temp_item = QTableWidgetItem(" ")
                # set INselectable
                temp_item.setFlags(Qt.ItemIsSelectable)
                self.setItem(i, j, temp_item)

    # load 2d form data via data_set[i][j] with the string type
    def load_data_set(self, rows, cols, data_set):
        self.setRowCount(rows)
        self.setColumnCount(cols)
        for i in range(rows):
            for j in range(cols):
                temp_item = QTableWidgetItem(str(data_set[i][j]))
                temp_item.setFlags(Qt.ItemIsSelectable)
                self.setItem(i, j, temp_item)

        


class My_main_window(QMainWindow):
    def __init__(self, parent=None, width=1000, hight=0):
        super().__init__(parent)
        # resize
        hight = width*0.618
        self.resize(width, hight)

        # set Windows title
        self.setWindowTitle("Main Window")

        # set menu
        self.menu = self.menuBar()
        
        # set file_menu
        self.file_menue = self.menu.addMenu("File")

        # set exit_bottn
        exit_action = QAction("Exit", self)
        exit_action.setShortcut(QKeySequence.Quit)
        exit_action.triggered.connect(self.close)
        self.file_menue.addAction(exit_action)
        
        # set Status Bar
        self.status = self.statusBar()
        self.status.showMessage("Not thing to do zzz")
        
        # set tabel
        self.table = My_table()
        self.setCentralWidget(self.table)

        # creat dock
        self.dock = QDockWidget()
        self.dock.setWindowTitle("Sql Actions")
        self.dock.setFeatures(QDockWidget.NoDockWidgetFeatures)
        # creat buttons
        self.dock_widget = QWidget()
        self.dock_widget_layout = QVBoxLayout()
        self.dock_widget_layout.addWidget(QPushButton("A1_____________"))
        self.dock_widget_layout.addWidget(QPushButton("A2_____________"))
        self.dock_widget.setLayout(self.dock_widget_layout)
        # set dock
        self.dock.setWidget(self.dock_widget)
        self.addDockWidget(Qt.LeftDockWidgetArea ,self.dock)

        # set font
        self.setFont(QFont("微软雅黑", pointSize = -1, weight = -1, italic = False))

        
        
        



if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_windows = My_main_window()
    main_windows.show()
    main_windows.table.load_data_set(1,2,[["data[1][1]", "dada[1][2]"]])
    app.exec_()

程序运行结果:
在这里插入图片描述



Django

用于实现web服务的程序。

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.

---- https://www.djangoproject.com/

Django 文档个人认为有着非常高的完善度,可以跟着文档一步一步搭建一个web服务。

如果是对于实现简单的几个页面的程序,只看 编写你的第一个 Django 应用,第 1 部分编写你的第一个 Django 应用,第 2 部分就差不多了。




总结

在这里插入图片描述
大致开发思路如下:

  • 对于 C/S 架构的开发,需要编写一个前端(图形界面或命令行界面),通过这个前端执行 pyodbc,通过 pyodbc 来与操作数据库并获得返回结果。
  • 对于 B/S 架构的开发,需要掌握简单的 HTML、CSS。在服务器上创运行一个Django服务程序,通过网页和浏览器与 Django服务程序进行交互。通过Django服务程序,来执行 pyodbc 或 Django 自带的数据库后端 api,以此操作数据库并获得返回结果。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值