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

2023-11-03

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


前言

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



整体开发环境

环境
服务器操作系统 Windows 10
数据库服务器 MicroSoft SQL Server 2019 Developer
客户端操作系统 Windows 10
客户端环境 Python 3.8.0、PySide2 5.15.2
ODBC pyodbc 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,以此操作数据库并获得返回结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 python 的数据库简单开发实验 的相关文章

  • 顶级棉花糖模式验证

    From 棉花糖 validation http marshmallow readthedocs org en latest quickstart html validation 我知道我可以在架构中的特定字段上注册验证器 如果验证器失败
  • 是否可以在 Sphinx 中隐藏 Python 函数参数?

    假设我有以下函数 该函数记录在Numpydoc 风格 https github com numpy numpy blob master doc HOWTO DOCUMENT rst txt 并且文档是自动生成的Sphinx http sph
  • 为什么我不能“string”.print()?

    我的理解print 在 Python 和 Ruby 以及其他语言 中 它是字符串 或其他类型 上的方法 因为它的语法非常常用 打印 嗨 works 那么为什么不呢 hi print 在 Python 中或 hi print在红宝石工作 当你
  • (Django) AJAX 请求的 CSRF 验证在 Chrome 中工作,但在 Firefox 中不起作用

    正如标题所述 我的 Django CSRF 验证在 Chrome 中有效 但在 Firefox 中无效 我想知道原因 以便解决此问题 我已将此包含在head我的标签基本 html我的应用程序中的所有其他文件都从中扩展的文件 base htm
  • Python代码执行时自动打开浏览器

    我正在 Python Flask 中实现 GUI Flask 的设计方式是 必须 手动 打开本地主机以及端口号 有没有一种方法可以使其自动化 以便在运行代码时自动打开浏览器 本地主机 我尝试使用 webbrowser 包 但它在会话终止后打
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • Microsoft Azure 数据仓库和 SqlAlchemy

    我正在尝试使用 python 的 sqlalchemy 库连接到 microsoft azure 数据仓库 并收到以下错误 pyodbc Error HY000 HY000 Microsoft ODBC SQL Server Driver
  • 将 for 循环替换为 pyspark 中的并行进程

    我在脚本中使用 for 循环来为 size DF 数据帧 的每个元素调用函数 但这需要很多时间 我尝试通过地图删除 for 循环 但没有得到任何输出 size DF 是我从表中获取的大约 300 个元素的列表 用于 import call
  • Python `concurrent.futures`:根据完成顺序迭代 future

    我想要类似的东西executor map 除了当我迭代结果时 我想根据完成的顺序迭代它们 例如首先完成的工作项应该首先出现在迭代中 等等 这样 当且仅当序列中的每个工作项尚未完成时 迭代就会阻塞 我知道如何使用队列自己实现这一点 但我想知道
  • 如何使用 Selenium Webdriver (Python) 在上下文菜单中选择“将图像另存为...”来保存图像

    我正在尝试使用 selenium webdriver 将特定图像保存到目录中 我希望通过模拟右键单击 img 元素并选择 将图像另存为 来实现此目的 使用以下代码我可以打开上下文菜单 但无法选择正确的选项 browser WebDriver
  • Learning_rate 不是合法参数

    我正在尝试通过实现 GridSearchCV 来测试我的模型 但我似乎无法在 GridSearch 中添加学习率和动量作为参数 每当我尝试通过添加这些代码来执行代码时 我都会收到错误 这是我创建的模型 def define model op
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • 如何使用 Ajax 在 Flask 中发布按钮值而不刷新页面?

    我有一个问题 当我单击 Flask 应用程序中的按钮时 我想避免重新加载 我知道有 Ajax 解决方案 但我想知道如何将我的按钮链接到 ajax 函数以发布按钮值并运行链接到其值的 python 函数 这是我的 html 按钮 div di
  • 无法在 Windows 服务器上使 SVN 预提交脚本失败

    我正在编写一个 SVN pre commit bat 文件 该文件调用 Python 脚本来查询我们的问题跟踪系统 以确定用户提供的问题跟踪 ID 是否处于正确的状态 例如 打开 状态 并与正确的关联项目 SVN 服务器运行 Windows
  • 用户的完整 UNIX 用户名

    想知道您是否知道是否有一种巧妙的方法可以从 shell 获取完整的用户名 示例 如果我的 UNIX 用户名是 froyo 那么我想获取我的全名 在本例中 如系统中注册的那样 froyo Abhishek Pratap Finger 命令可以
  • Python 可以替代 Java 小程序吗?

    除了制作用于物理模拟 如抛射运动 重力等 的教育性 Java 小程序之外 还有其他选择吗 如果你想让它在浏览器中运行 你可以使用PyJamas http pyjs org 这是一个 Python 到 Javascript 的编译器和工具集
  • Matplotlib 渲染日期、图像的问题

    我在使用 conda forge 的 Matplotlib v 3 1 3 和 python 3 7 时遇到问题 我拥有 Matplotlib 所需的所有依赖项 当我输入这段代码时 它应该可以工作 我得到了泼溅艺术 它基于此 YouTube
  • 如何有效地计算另一列中每个元素的较大元素的数量?

    我有以下内容df name created utc 0 t1 cqug90j 1430438400 1 t1 cqug90k 1430438400 2 t1 cqug90z 1430438400 3 t1 cqug91c 143043840
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节
  • 使用Python的线程模块调用ctypes函数比使用多处理更快?

    我一生都无法找出这个问题的答案 我编写了一个可以执行数百次繁重计算的脚本 我有一个绝妙的主意 将这些计算任务编写为 C 然后使用 Python 的 ctypes 与它们交互 我心想 我什至可以使用并行性进一步优化它 我最初的方法是使用线程

随机推荐

  • STM32 基本定时器实验

    1 基本定时器简介 时钟源 时钟挂载在APB1总线下 中间有一个倍频器 sys stm32 clock init时钟已经设置APB1总线时钟频率为36M 预分频器分频系数为2 所以挂载在APB1总线的定时器时钟频率为72Mhz 图中对应的时
  • node mysql 连接 时区_Nodejs Date 保存到mysql中时区问题,处理方法

    nodejs中mysql用法 1 建立数据库连接 createConnection Object 方法 该方法接受一个对象作为参数 该对象有四个常用的属性host user password database 与php中链接数据库的参数相同
  • ArrayLIst、HashMap

    底层维护了一个Objec的数组 创建对象时 初始大小是0 第一次新增元素时扩容为10 再次扩容为1 5倍 扩容的时机是内部数组满了之后 再次add才会扩容 非线程安全 线程安全的Vector HashMap jdk7以前为数组 链表 搜索的
  • 数据结构知识点汇总

    1 用链表表示线性表的优点是 便于插入和删除操作 2 单链表中 增加头结点的目的是 方便运算的实现 3 栈和队列的共同特点是 只允许在端点处插入和删除元素 4 栈通常采用的两种存储结构是 线性存储结构和链表存储结构 5 队列具有 先进先出
  • Lamport 逻辑时钟

    分布式系统中按是否存在节点交互可分为三类事件 一类发生于节点内部 二是发送事件 三是接收事件 注意 以下文章中提及的时间戳如无特别说明 都指的是Lamport 逻辑时钟的时间戳 不是物理时钟的时间戳 如果a在进程Pi中 b在进程Pj中 Ci
  • 今日分享积累的5个AI绘画网站,好用且免费

    AI绘画即基于人工智能的绘画技术 让设计师能够以全新的方式创作出惊人的艺术作品 而随着AI绘画技术的发展 市面上也多了很多能免费使用的AI绘画网站 可以为我们提供更多的绘画灵感和创作可能性 接下来我将为大家推荐5个能免费使用的AI绘画网站
  • ngrok搭建服务器(超级详细)

    前言 我一直都在usr local文件下操作 有不懂的同学给我留言 我没有修改源码 只是测试能否生成服务端文件 有需要的同学可以修改源码 使用 ip 做域名时 随机生成的子域名导致地址错误解决办法就是改源码 去掉随机生成 在ngrok目录下
  • WAIC2023:图像内容安全黑科技助力可信AI发展

    目录 0 写在前面 1 AI图像篡改检测 2 生成式图像鉴别 2 1 主干特征提取通道 2 2 注意力模块 2 3 纹理增强模块 3 OCR对抗攻击 4 助力可信AI向善发展 总结 0 写在前面 2023世界人工智能大会 WAIC 已圆满结
  • python insert插入新一列

    mydata insert 1 date data 日期 mydata 原有数据 1 插入第几列 data 插入列名 data 日期 插入列内容 原有数据插入一列 mydata insert 1 date data 日期 mydata 原有
  • 快速构建Kubesphere 3.0并设置Kubesphere 多集群联邦

    这里我们Host选择使用单节点All in One安装模式 可以零配置快速部署 KubeSphere和Kubernetes 我们安装联邦集群需要有一台节点进行管理 Member需要在Kubernetes中安装Kubesphere当作Memb
  • 目标检测pytorch版yolov3五——解码过程和可视化以及predict预测过程

    本篇博客是我学习某位up在b站讲的pytorch版的yolov3后写的 那位up主的b站的传送门 https www bilibili com video BV1A7411976Z 他的博客的传送门 https blog csdn net
  • c/c++linux后台服务器开发如何提升?(路线图已备好)

    随着业务市场的不断壮大 更便捷的开发语言也越来越受到市场的欢迎 Java python还有新贵golang 那c c 语言的开发者市场在哪里 虽然说没有活干说的可能过于夸张 但是面临的事实就是比不了 可能初学一点Java python等等就
  • 将NFA变成最小化DFA的方法

    学习的时候总感觉这个遇到新的题目不会做 这里总结一下 整个流程是这样的 我们直接来看一个例子 使用上面的算法来实现我们最后的目标 a b ba ab 我们先来画NFA 明确 开始状态和接受状态 终结状态要画两个圈 值得注意的是 由于 也可以
  • netron可视化

    1 netron简介 在很多项目中 经常会遇到各种网络模型 在学习的过程中 我们需要快速去了解这些结构 若只是单纯的看模型文件 很难了解其结构 netron可视化工具 可以清晰的看看见每一层的输入输出 网络总体的架构 而且还能支持各种网络框
  • API接口安全加密,防止接口被黑客攻击

    API接口安全加密的主要目的是为了防止黑客攻击 保护敏感数据不被泄露 以下是一些常用的API接口安全加密方式 HTTPS协议 使用HTTPS协议可以对数据进行传输加密 防止数据在传输过程中被窃听或篡改 API密钥认证 API密钥认证是指在每
  • 关键字constexpr(C++)

    关键字constexpr是在C 11中引入的 并且在C 14中得到了改进 像const一样 它可以应用于变量 当任何代码试图去修改该值时 都会引发编译器错误 与const不同 constexpr也可以应用于函数和类构造函数 constexp
  • 第13届CCF-CSP题解

    文章目录 Less 1 出现最多的数 Less 2 ISBN号码 Less 3 最大矩形 Less 4 有趣的数 Less 5 dfs Less 1 出现最多的数 直接根据题意模拟 include
  • 【yolov6系列一】深度解析网络架构

    在yolov5霸屏计算机视觉领域很久时 六月处美团开源了yolov6 并号称在精度和速度上均超越其他同量级的计算机视觉模型 刚刚瞅了一眼 star已经超过2 8k 脑子里莫名冒出一个词 国货之光 网上基于yolov6的解读有很多 文末会附上
  • Kmeans简单实现

    一 KMeans算法实现代码 class KMeans def init self data k clustres self data data self k clustres k clustres def train self max i
  • 基于 python 的数据库简单开发实验

    基于 python 的简单数据库应用程序开发总结 前言 在大三上数据库课时需要做基于数据库的 C S 和 B S 的简单应用 对之前一直接触命令行黑框框的笔者来说 需要临时学习不少新的技术 实际最后的开发非常简单 只是在前期选定技术和查找文