【python零基础入门学习】python进阶篇之数据库连接-PyMysql-全都是干货-一起来学习吧!!!

  本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》暂未更新

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

 python进阶篇之数据库连接-PyMysql

安装

python包官方站点:https://pypi.python.org

# pip install xxxx

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mysql-connector-python-rf

在线安装,默认使用的是国外站站,也可以设置,使用国内镜像站点:

安装依赖包

[root@localhost packages]# yum install -y gcc

[root@room8pc16 day02]# mkdir ~/.pip/

[root@room8pc16 day02]# vim ~/.pip/pip.conf

[global]

index-url = http://pypi.douban.com/simple/

[install]

trusted-host=pypi.douban.com

### 本地安装:

注意:需要在虚拟环境中安装

# ls /linux-soft/05/

zzg_pypkgs.tar.gz

# tar xf zzg_pypkgs.tar.gz

# cd zzg_pypkgs

# pip install pymysql_pkgs/*

进入正文:数据库

数据库:

你正在为一个小型公司编写基础数数据库,数据库需要记录员工,部门和发工资的信息.

收集字段:姓名,性别,联系方式,部门,出生日期,工资日,底薪,奖金,实发工资

数据库范式:

数据库范式有第一范式、第二范式、第 三范式、巴斯-科德范式、第四范式、第五范式六种

所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原>子性的,即数据库表的每一列都是不可分割的原子数据项。如联系方式不能成为一个字段,

需要将其拆分成家庭住址、电话号码、email等。

第二范式(2NF)是在第一范式(1NF) 的基础上建立起来的,即满足第二范式(2NF)必须

先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须 可以被>唯一地区分。简单来说就是每个表需要有个主键

员工表:员工ID、姓名、出生日期、email、部门ID

部门表:部门ID、部门名

工资表:id、工资日、员工ID、底薪、奖金、实发工资

第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。简单来说>,非主字段,不能依赖其他非主字段。实发工资是由底薪、奖金算出来的,所以它不应该出

现在数制库中。用的时候,应该是通过程序计算。

[root@room8pc16 day02]# mysql -uroot -ptedu.cn

MariaDB [(none)]> CREATE DATABASE nsd1907 DEFAULT CHAR SET utf8;

>grant all on *.* to root@'192.168.1.%' identified by '123qqq...A' ;

## pymsql操作数据库

- 连接

- 创建游标。游标就像是文件对象,通过文件对象可以对文件实施读写操作,通过游标就可

以对数据库进行增删改查。

- 执行SQL语句

- 如果执行的语句是增删改,必须commit确认

- 关闭

连接数据库

import pymysql#创建链接
conn=pymysql.connect(
host='192.168.1.100',
port=3306,
user='root',
passwd='123qqq...A',
db='nsd1907',
charset='utf8')#创建游标
cur = conn.cursor()# 编写SQL语句
create_dep = """CREATE TABLE departments(
dep_id INT, dep_name VARCHAR(20),
PRIMARY KEY(dep_id)
)"""
create_emp = """CREATE TABLE employees(
emp_id INT, emp_name VARCHAR(20), birth_date DATE,
email VARCHAR(50), dep_id INT,
PRIMARY KEY(emp_id),
FOREIGN KEY(dep_id) REFERENCES departments(dep_id)
)"""
create_sal = """CREATE TABLE salary(
id INT, date DATE, emp_id INT,
basic INT, awards INT,
PRIMARY KEY(id),
FOREIGN KEY(emp_id) REFERENCES employees(emp_id)
)"""# 执行SQL语句
cur.execute(create_dep)
cur.execute(create_emp)
cur.execute(create_sal)# 确认提交
conn.commit()# 关闭
cur.close()
conn.close()

增删改查

#增删改查import pymysql#创建链接
conn=pymysql.connect(
host='192.168.1.100',
port=3306,
user='root',
passwd='123qqq...A',
db='nsd1907',
charset='utf8')#创建游标
cur = conn.cursor()# # 创建部门
# insert1 = "INSERT INTO departments VALUES(%s, %s)"
# cur.executemany(insert1, [(1, '人事部')])
# #cur.executemany(insert1, (1, '人事部'))
#cur.executemany(insert1, [(2, '运维部'), (3, '开发部'), (4, '测试部')])
# cur.executemany(insert1, [(4, '测试部'), (5, '市场部'), (6, '销售部')])#insert1 = "INSERT INTO departments VALUES(9, '人事部3'),(10,'人事部4')"
#cur.execute(insert1)#更新部门,将人事部改为人力资源部
# update1 = "UPDATE departments SET dep_name=%s WHERE dep_name=%s"
# cur.execute(update1, ('人力资源部', '人事部'))# # 删除4号部门
# del1 = "DELETE FROM departments WHERE dep_id=%s"
# cur.execute(del1, (4,))#查询
select1 = "SELECT * FROM departments"
cur.execute(select1)
result1 = cur.fetchone()#取一个记录
print(result1)
print('*' * 30)
result2 = cur.fetchmany(2)#继续取两个记录
print(result2)
print('*' * 30)
result3 = cur.fetchall()#取出剩余全部记录
print(result3)# 执行SQL语句
# cur.execute(create_dep)
# cur.execute(create_emp)
# cur.execute(create_sal)# 确认提交
conn.commit()# 关闭
cur.close()
conn.close()

游标

SQLAlchemy:

  • sqlalchemy采用ROM管理数据库

  • O:Object 对象

  • R:relational 关系

  • M: Mapping 映射

  • sqlalchemy 将一个class与数据中的一张表相关联

  • sqlalchemy将类变量与表的字段关联

  • sqlalchemy将数据库的各种数据类型定义成了相关的class

  • sqlalchemy将class的实例与表的记录关联

now( ) year( ) month( ) day( ) date( ) time( ) datetime curtime( ) curdate( )

安装

#安装

pip install sqlalchemy_pkgs/*

 连接数据库

mysql> CREATE DATABASE tedu1907 DEFAULT CHAR SET utf8;
mysql> show grants for root@'192.168.1.%';dbconn.py:from sqlalchemy import create_engine,Column,Integer,String,Date,ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 创建到mysql数据库的连接引擎
engine = create_engine('mysql+pymysql://root:123qqq...A@192.168.1.100/tedu1907?charset=utf8',encoding = 'utf8',#echo = True 屏幕上打印日志)#创建实体类的基类---固定必须要写
Base = declarative_base()#创建到数据库连接的会话类
Session = sessionmaker(bind=engine)#创建实体类,也就是创建表对应的类
class Departments(Base):__tablename__ = 'departments' #声明类对应的表#每个字段都要用Column来定义dep_id = Column (Integer,primary_key=True) #设置为主键dep_name = Column (String(20),unique=True) #名称必须唯一def __str__(self):          return "部门: %s" % self.dep_name
-----为后面的 print(hr)输出用class Employees(Base):__tablename__ = 'employees'emp_id = Column(Integer,primary_key=True)emp_name = Column(String(20))birth_date = Column(Date)email = Column(String(50))dep_id = Column(Integer,ForeignKey('departments.dep_id'))class Salary(Base):__tablename__ = 'salary'id = Column(Integer,primary_key=True)date = Column(Date)emp_id = Column(Integer,ForeignKey('employees.emp_id'))basic = Column(Integer)awards = Column(Integer)if __name__ == '__main__':#如果库中无表则创建,有表将不会执行Base.metadata.create_all(engine)

增删改查

#create / retrieve / update / delete
from dbconn import Session,Departments,Employees#创建到数据库的会话连接
session = Session()#插入数据
hr = Departments(dep_id =1 ,dep_name = '人事部')
ops = Departments(dep_id =2 , dep_name = '运维部' )
dev = Departments(dep_id =3 ,dep_name = '开发部')
qa = Departments(dep_id =4 ,dep_name = '测试部')
sales = Departments(dep_id =5 ,dep_name = '销售部')
market = Departments(dep_id =6 ,dep_name = '市场部')lb = Employees(emp_id = 1 , emp_name = '刘备',birth_date = '1982-3-15', email = 'lb@sg.com' ,dep_id = 1
)km = Employees(emp_id = 2 , emp_name = '孔明',birth_date = '1982-3-15', email = 'km@sg.com' ,dep_id = 2
)# session.add_all([hr,ops,dev,qa,sales,market,lb])
#session.add_all([km])
#session.add(单个)#查询部门,传入的是class,返回的是实例集合
# qset1 = session.query(Departments)
# print(qset1) #此时只是sql语句,取值时,才是真正连接数据库
# print(qset1.all())
# for dep in qset1:
#     print(dep.dep_id,dep.dep_name)#查询员工,传入的是字段,返回的是由字段构成的元组
# qset2 = session.query(Employees.emp_name,Employees.email)
# print(qset2)
# print(qset2.all())
# for emp in qset2:
#     print(emp)
# print('*' * 30)
# for name , email in qset2:
#     print(name,email)#查询部门,按id排序
# qset3 = session.query(Departments).order_by(Departments.dep_id)
# for dep in qset3:
#     print(dep.dep_id,dep.dep_name)#查询部门id是1的部门
# qset4 = session.query(Departments).filter(Departments.dep_id==1)
# for dep in qset4:
#     print(dep.dep_id,dep.dep_name)#查询部门id是2到4的部门
# qset5 = session.query(Departments)\
#     .filter(Departments.dep_id>=2)\
#     .filter(Departments.dep_id<=4)
# for dep in qset5:
#     print(dep.dep_id,dep.dep_name)#模糊查询:
# qset6 = session.query(Employees.emp_name,Employees.email)\
#     .filter(Employees.email.like('%@sg.com'))
# for emp in qset6:
#     print(emp.emp_name,emp.email)#多表查询: query查询的时候,先写Employees.emp_name,就要join Departments
# qset7 = session.query(Employees.emp_name,Departments.dep_name)\
#     .join(Departments)
# qset7 = session.query(Departments.dep_name,Employees.emp_name)\
#      .join(Employees)
# for data in qset7:
#     print(data)# 修改
# qset9 = session.query(Departments)\
#     .filter(Departments.dep_name=='人事部')
# hr = qset9.first()  # 取出查询结果的第一项
# print(hr)
# hr.dep_name = '人力资源部'# 删除
qset10 = session.query(Departments)\.filter(Departments.dep_name=='销售部')
sales = qset10[0]
print(sales)
session.delete(sales)#如果是增删改操作,需要确认commit
session.commit()#关闭会话
session.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/194955.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【npm 错误】:npm ERR! code ERESOLVE、npm ERR! ERESOLVE could not resolve问题

用过npm的小伙伴都会有这么一个情况出现&#xff0c;就是npm install /npm install xxxx 会出现改一连串的错误&#xff0c;如下&#xff1a; 解决办法&#xff1a; 只要在npm install后面加上--legacy-peer-deps就可以解决问题,安装插件也一样 npm install --legacy-peer-dep…

原论文一比一复现 | 更换 RT-DETR 主干网络为 【VGG13】【VGG16】【VGG19】| 对比实验必备

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 论文地址:https://arxiv.o…

V10服务器安装virt-manage

kvm是什么 KVM(Kernel-based Virtual Machine, 即内核级虚拟机) 是一个开源的系统虚拟化模块。它使用Linux自身的调度器进行管理&#xff0c;所以相对于Xen&#xff0c;其核心源码很少。目前KVM已成为学术界的主流VMM之一&#xff0c;它包含一个为处理器提供底层虚拟化 可加载…

[CISCN 2023 华北]pysym

源码如下 from flask import Flask, render_template, request, send_from_directory import os import random import string app Flask(__name__) app.config[UPLOAD_FOLDER]uploads app.route(/, methods[GET]) def index():return render_template(index.html) app.route…

IDEA写mybatis程序,java.io.IOException:Could not find resource mybatis-config.xml

找不到mybatis-config.xml 尝试maven idea:module&#xff0c;不是模块构造问题 尝试检验pom.xml&#xff0c;在编译模块添加了解析resources内容依旧不行 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.or…

vb.net 实时监控双门双向门禁控制板源代码

本示例使用设备介绍&#xff1a;实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) Imports System.Net.Sockets Imports System.Net Imports System.Text Imports System.ThreadingImports System.Net.NetworkInformation Imports System.Man…

释放搜索潜力:基于Milvus快速搭建语义检索系统(快速版),让信息尽在掌握

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

用照片预测人的年龄【图像回归】

在图像分类任务中&#xff0c;卷积神经网络 (CNN) 是非常强大的神经网络架构。 然而&#xff0c;鲜为人知的是&#xff0c;它们同样能够执行图像回归任务。 图像分类和图像回归任务之间的基本区别在于分类任务中的目标变量&#xff08;我们试图预测的东西&#xff09;不是连续…

git的简单使用

git 的简单使用 前言&#xff1a; 为了方便理解&#xff0c;文中一些内容表达的不是十分准确&#xff0c;如有错误&#xff0c;欢迎大家友善的指出。 接下来就开始了&#xff01;&#xff01; 使用git其实就是围绕下面这个图展开的&#xff0c;大家可以先看下图&#xff0c…

VB.net WebBrowser网页元素抓取分析方法

在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…

「Verilog学习笔记」用3-8译码器实现全减器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 首先列出3-8译码器和全减器的真值表 全减器真值表如下 3-8译码器真值表如下 timescale 1ns/1nsmodule decoder_38(input E ,input A0 …

系列四、JVM的内存结构【本地接口(Native Interface)】

一、组成 本地接口由本地方法栈&#xff08;Native Method Stack&#xff09;、本地方法接口&#xff08;Native Interface&#xff09;、本地方法库组成。 二、本地接口的作用 本地接口的作用是融合不同的编程语言为Java所用&#xff0c;它的初衷是融合C/C程序&#xff0c;Jav…

基于PHP的纺织用品商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的纺织用品商城系统 一 介绍 此纺织用品商城系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。用户可注册登录&#xff0c;购物下单&#xff0c;评论等。管理员登录后台可对纺织用品&#xff0c;用户&#xf…

C# chatGPT API调用示例

# C# API现在需要Verify your phone number to create an API key using Newtonsoft.Json; using System.Text;class Program {static readonly HttpClient client new HttpClient();static async Task Main(){try{// 设置 API 密钥string apiKey "your api";clie…

基于IDEA进行Maven工程构建

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 1. 构建概念和构建过程 项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程&#xff0c;在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。 项目构建是软件开发过程中…

短视频账号矩阵系统源码/技术源码分享/技术搭建架构

短视频账号矩阵系统----技术源码分享/技术搭建架构 抖音seo又叫抖音搜索引擎&#xff0c;只要能做到布词&#xff0c;和过去的百度seo优化一样&#xff0c;布词&#xff0c;布关键词&#xff0c;当搜索栏搜索时可以搜索到该短视频。优化视频关键词&#xff0c;做好关键词的优化…

Git面经

Git八股文 第一章 git基础 1.1 什么是git git是一款免费的开源的分布式版本控制系统 1.2 为什么要使用git 为了保留之前的所有版本&#xff0c;方便回滚或修改 1.3 集中化版本控制系统和分布式版本控制系统的区别 集中化版本控制系统如svn&#xff0c;客户端连接到中央服…

TSINGSEE视频汇聚管理与AI算法视频质量检测方案

一、建设背景 随着互联网视频技术的发展&#xff0c;视频监管在辅助安全生产、管理等方面发挥了不可替代的作用。但是&#xff0c;在监管场景中&#xff0c;仍然存在视频掉线、视频人为遮挡、视频录像存储时长不足等问题&#xff0c;对企业的日常管理和运转存在较大的安全隐患…

excel中的OFFSET函数

介绍 OFFSET函数是确定从基点出发移动后的引用区域。它有5个参数&#xff1a; 第1个参数是引用的参考基点区域第2个参数是移动的行数&#xff0c;正数代表向下移动的行数&#xff0c;负数代表向上移动的行数第3个参数是移动的列数&#xff0c;正数代表向右移动的列数&#xf…

基于IDEA 进行Maven依赖管理

1. 依赖管理概念 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中&#xff0c;避免出现版本冲突和依赖缺失等…