python基础

文章目录


前言

python这么火o,我们也学学哈哈!因为我是写java的,所以有很多基础的东西就没有点到,然后这个可能对会java的朋友更友好一些。


提示:以下是本篇文章正文内容,下面案例可供参考

一、搭建开发环境

1.1 安装

在这里插入图片描述

1.2 测试

在这里插入图片描述
在这里插入图片描述

1.3 第三方开发环境

在这里插入图片描述
https://www.runoob.com/w3cnote/pycharm-windows-install.html

1.4 打开软件,创建项目

在这里插入图片描述

二、基础

2.1 print()

# coder: lixy
# time: 2021/5/25 14:00
print("hello python!")
print(1+4)
# 输出到控制台,但是不换行
print("hello", "python", "!")

# 输出到文件,没有创建,a+:有就追加, 需要有file=
fp = open('d:/test.txt', 'a+')
print("hello python write to file!", file=fp)

2.2 转义字符与原字符

# 转义字符, \n换行 \b空格 \t tab键 \r 回车
print("hello\npython")
print("hello\tpython")
print("hello\bpython")
print("hello\rpython")
print("http://www.baidu.com")
print("hello\'python\'")

# 原字符,不希望字符串中的转义字符起作用
print(r"hello\rpython")

2.3 位与字节

在这里插入图片描述

2.4 标识符和保留字

标识符: 需要命名的就是标识符
在这里插入图片描述

保留字: python中有特定的含义,起名不能使用这个字;
[‘False’, ‘None’, ‘True’, ‘and’, ‘as’, ‘assert’, ‘async’, ‘await’, ‘break’, ‘class’, ‘continue’, ‘def’, ‘del’, ‘elif’, ‘else’, ‘except’, ‘finally’, ‘for’, ‘from’, ‘global’, ‘if’, ‘import’, ‘in’, ‘is’, ‘lambda’, ‘nonlocal’, ‘not’, ‘or’, ‘pass’, ‘raise’, ‘return’, ‘try’, ‘while’, ‘with’, ‘yield’]

# python的保留字
import keyword
print(keyword.kwlist)

2.5 定义变量和使用

内存布局:
在这里插入图片描述

# 变量定义
name = 'lixy'
print("标识", id(name))
print("类型", type(name))
print("值", name)
# 变量定义
name = 'lixy'
# 变量使用
name = '小明'
print(name)

在这里插入图片描述

2.6 常见的数据类型

在这里插入图片描述
浮点数标识不精确,通过Decimal来计算,和java差不多

# 浮点类型
print(1.1+2.2)
from decimal import Decimal
print(Decimal("1.1") + Decimal("2.2"))

在这里插入图片描述
python能将布尔转成1/0进行运算

# 布尔类型,python能转成1/0
print(True + 1)
print(False + 1)

2.7 数据类型转换

# 数据类型转换
name = '小明'
age=20
print("名字:" + name + "年龄:"+str(age))

在这里插入图片描述
在这里插入图片描述

2.8 python中的注释在这里插入图片描述

2.9 算数运算符

在这里插入图片描述

在这里插入图片描述

# 算数运算符
print(9/3)      # 除法
print(9//3)     # 整除
print(11 % 2)   # 取余运算
print(2**3)     # 幂运算

在这里插入图片描述
在这里插入图片描述

2.10 赋值运算符

在这里插入图片描述
这个交换值,比java方便多了啊!

# 系列解包赋值主要用于两个数交换值
a, b, c = 1, 20, 3
print("交换前 a:" + str(a), "b:" + str(b), "c:" + str(c))
a, b = b, a
print("交换后 a:" + str(a), "b:" + str(b), "c:" + str(c))

在这里插入图片描述

2.11 布尔运算符

在这里插入图片描述

# 或非
a = 1
b = 2
print(a == b)
print(a == 1 or b == 1)
print(a == 1 and b == 1)
# 非
s = "hello python!"
print("h" in s)
print('h' not in s)

2.12 位运算

在这里插入图片描述
python中没有这个,有and, or

print(a == 1 || b == 1)
print(a == 1 && b == 1)

2.13 运算符优先级

在这里插入图片描述

三、程序的组织结构

在这里插入图片描述

3.1 顺序结构

3.2 选择结构

在这里插入图片描述

# 测试对象的布尔值:一下都是False, 其他对象的bool都是True
print(bool(False))
print(bool(0))
print(bool(0.0))
print(bool(None))
print(bool(""))
print(bool([]))     # 空列表
print(bool(list()))     # 空列表
print(bool(()))     # 空元组
print(bool(tuple()))     # 空元组
print(bool({}))     # 空字典
print(bool(dict()))     # 空字典
print(bool(set()))      # 空集合

在这里插入图片描述
在这里插入图片描述

# 选择结构
x = 1
y = 1
if x > y:
    print("x>y")
elif x < y:
    print("x<y")
else:
    print("x==y")

在这里插入图片描述
在这里插入图片描述

# 选择结构
x = 1
y = 1
if x > y:
    print("x>y")
elif x < y:
    print("x<y")
elif x == y:
    print("x==y")
else:
    pass

3.3 循环结构

在这里插入图片描述

# 内置函数range
r = range(10)
print(r)    # range(0, 10) 是迭代器对象, 默认从0开始,步长为1
# 使用list函数查看数据, list是列表,java中的集合
print(list(r))
r1 = range(1, 10)  #从1开始,默认步长1
print(r1)
print(list(r1))
#三个参数
r2 = range(1, 10, 2)  #从1开始,默认步长1
print(r2)
print(list(r2))
#判断证书是否存在, in not in
print(10 in r2)
print(10 not in r2)

在这里插入图片描述

在这里插入图片描述

3.3.1 while

#while
a = 1
while a<10:
    print(a)
    a+=1

在这里插入图片描述

#计算0-4的累加
a = 0
sum_count = 0
while a<5:
    sum_count+=a
    a+=1
print("和是:"+str(sum_count))

3.3.2 for -in

在这里插入图片描述

# for in 遍历字符串和迭代器和序列
for ele in "element":
    print(ele)
r3 = range(1, 10, 2)
for ele in r3:
    print(ele)
l = list(r3)
for ele in l:
    print("遍历序列:" + str(ele))
# 如果在循环体中不需要使用被遍历的元素,可以定义元素为_
for _ in l:
    print("少有人走的路")

在这里插入图片描述

3.3.3 break

和java用法没区别

3.3.4 continue

和java用法没区别

3.4 列表

一java中的集合对应,列表可以存储多个不同类型的对象
在这里插入图片描述

3.4.1 创建

在这里插入图片描述

#list
a = 10
l=["hello", "list", a]
print(l)
list1= list(["hello", "list", 10])
print(list1)

在这里插入图片描述

3.4.2 查询

在这里插入图片描述
在这里插入图片描述

#查询某个对象的索引, 相同只返回第一个索引, 不存在的元素抛异常
print(l.index("hello"))
#指定index范围
print(l.index("hello", 0, 4))
#根据索引查询元素
print(l[2])
print(l[-1])
#获取列表中多个元素
print(l[1:3:1])
#也可以写成这个样子
print(l[1:3:])
print(l[1:3:2])
#逆序
print(l[::-1])
print(l[1:0:-1])

在这里插入图片描述

3.4.3 增

在这里插入图片描述

list1 = [1, 2, 3, 4, 5]
list1.append(6)
print(list1)
list1.extend(["hello", "list"])
print(list1)
#在指定位置添加一个元素
list1.insert(1, "ok")
print(list1)

list2 = [True, False, "hello"]
#在指定位置添加多个元素
list1[1:] = list2
print(list1)

在这里插入图片描述

3.4.4 删

在这里插入图片描述

list1 = [1, 2, 3, 4, 5, 3]
# list1.append(6)
# list1.remove(3)
# 索引不错在抛出异常
# list1.remove(10)
# 根据索引删除元素, 不指定,会删除最后一个元素
# list1.pop()
# list1.pop(2)
# 切片删除,会产生新的列表对象, [start_index: end_index]
list_new = list1[1:3]
print("切片后的列表" + str(list_new))
# 不产生新列表的切片, 将1-2下表元素删除
list1[1:3] = []
# 清除列表中的元素
list1.clear()
# 删除列表对象
del list1
print(list1)

3.4.4 改

在这里插入图片描述

print("-----update-----")
list_update = [1,2,3,4]
list_update[2] = 30
print(list_update)
list_update[1:3] = [20,30]
print(list_update)

3.4.5 列表排序

在这里插入图片描述

print("-----列表排序-----")
#sort()不产生新列表对象
list_sort = [1,-5,3,-30,99,0]
list_sort.sort()    # 默认升序
# 降序
list_sort.sort(reverse=True)       # 降序排序
print(list_sort)
#sorted()产生新列表
lsit_sort_new = sorted(list_sort, reverse=True)
print(lsit_sort_new)

在这里插入图片描述

3.4.6 列表生成式

在这里插入图片描述

print("--------------列表生成式-------------")
lst = [i for i in range(1, 10)]
lst1 = [i*i for i in range(1, 10)]
print(lst1)

在这里插入图片描述

3.5 字典 – java中的map

在这里插入图片描述

3.5.1 字典创建

在这里插入图片描述

#字典
# 创建方式一
people = {"name": "小明", "age": 18}
print(people)
print(type(people))
# 创建方式二
people2 = dict(name="小欧诺", age=20)
print(people2)

在这里插入图片描述

3.5.2 字典数据获取

在这里插入图片描述

# 数据获取
print(people["name"])
print(people.get("name"))
# 如果没有key, 返回默认值
print(people.get("nam"), "不存在")

在这里插入图片描述

3.5.3 增删改

# 增
people["gender"]="男"
print(people)
# 改
people["gender"]= "女"
# 删除
del people["age"]
print(people)
# 删除整个对象
people.clear()

在这里插入图片描述

3.5.4 获取字典的keys,values,items

在这里插入图片描述

#获取所有key
keys= people.keys()
print(keys)
#转成list列表
print(list(keys))
#获取所有values
values = people.values()
print(values)
print(list(values))
#获取所有items元组
items = people.items()
print(items)
print(list(items))

在这里插入图片描述

3.5.5 字典元素的遍历

在这里插入图片描述
遍历的是字典中的key

#遍历items
for item in people:
    print(people.get(item))
    print(people[item])

在这里插入图片描述

3.5.6 字典的特点

在这里插入图片描述

list_ = ["1","2"]
dict_ = dict(name="测试", list=list_)
print(dict_)

在这里插入图片描述

3.5.7 字典生成式

在这里插入图片描述
在这里插入图片描述

#字典生成式
items = ["Fruits", "Books", "Others"]
prices=[96, 87, 65]
items_prices_ = {item: price for item, price in zip(items, prices)}
print(items_prices_)
#key字母大写
items_prices_ = {item.upper(): price for item, price in zip(items, prices)}
print(items_prices_)

{‘Fruits’: 96, ‘Books’: 87, ‘Others’: 65}
{‘FRUITS’: 96, ‘BOOKS’: 87, ‘OTHERS’: 65}

3.5.8 字典总结

在这里插入图片描述
–忘记保存了–哎…还得重新写后边的,┭┮﹏┭┮

3.6 元组

可变序列: 有增删改操作,并且内存地址不变 [列表list 和 字典]
不可变序列: 没有增删改操作 [String 和 元组]

# 可变序列: 有增删改操作,并且内存地址不变     [列表list 和 字典]
# 不可变序列: 没有增删改操作    [String 和 元组]

# 创建元组
scala_ = ("python", "java", "scala")
# 也可以省略小括号
scala_2 = "python", "java", "scala"
print(scala_)
print(scala_2)
# 如果元组中只有一个元素,则需要有,
python_ = "python",
print(type(python_))
t = tuple(("python", "java", "scala"))
print(t)
# 空元组
tuple1 = tuple()
tuple2 = ()

# 元组不可以修改引用地址
tuple_ = tuple(("成绩", [100, 99, 88]))
print(tuple_[0], tuple_[1])
# 可以将tuple_[1]内容改变
tuple_[1].append(99)
print(tuple_[0], tuple_[1])

# 元组遍历
for item in tuple_:
    print(item)

3.7 集合 – java中的set

在这里插入图片描述

3.7.1 集合创建与其他操作

在这里插入图片描述
在这里插入图片描述

3.7.2 集合间的关系

在这里插入图片描述

3.7.3 集合间的数学运算

# 集合不能重复
s = {1, 2, 3, 4, 4, 5, 5, 6}
print(s)
set1 = set(range(6))
print(set1)

#集合间的关系
s2 = {6,5,4,3,2,1, 10}
print(s == s2)
print(s2.issubset(s))
print(s2.isdisjoint(s))

# 交集
print(s.intersection(s2))
print(s & s2)
# 并集
print(s.union(s2))
print(s | s2)
# 差集
print(s.difference(s2))
print(s-s2)
print(s2.difference(s))
print(s2-s)
# 对称差集
print(s.symmetric_difference(s2))
print(s ^ s2)

3.7.4 集合生成式

在这里插入图片描述

# 列表生成式
lst = [i * i for i in range(10)]
print(lst)
# 集合生成式
range_ = {i * i for i in range(10)}
print(range_)

在这里插入图片描述

3.7.5 元组、集合总结

在这里插入图片描述

3.8 列表list、集合set、字典dict、元组tuple对比

在这里插入图片描述

3.9 字符串

在这里插入图片描述

3.9.1 字符串驻留机制

在这里插入图片描述
在这里插入图片描述
字符串拼接用join()
在这里插入图片描述

3.9.2 查询操作

推荐find()/rfind()
在这里插入图片描述

3.9.3 大小写转换

在这里插入图片描述

3.9.4 内容对齐方法

在这里插入图片描述

3.9.5 字符串分割

在这里插入图片描述

3.9.6 判断字符串

在这里插入图片描述

3.9.7 替换与合并

在这里插入图片描述

3.9.8 字符串的比较操作

比较的是每一个字符的Ascii码值
ord获取Ascii码, char获取对应的字符串

在这里插入图片描述
==和is的区别
==比较的是内容
is 比较的是内存地址是否相等

3.9.9 切片操作

s[start: end: step]
在这里插入图片描述

3.9.10 格式化字符串

在这里插入图片描述
在这里插入图片描述

# 格式化方式一:
name="李四"
age=20
print("name is %s, age is %d" % (name, age))
# 格式化方式二:
print("name is {0}, age is {1}".format(name, age))
# 格式化方式三:  有点儿scala的意思哈
print(f"name is {name}, age is {age}")

在这里插入图片描述

3.9.11 字符串编解码

在这里插入图片描述

# 编解码
s="天涯共此时";
print(s.encode(encoding="GBK"))     #GBK一个中文占两个字节
print(s.encode(encoding="UTF-8"))       #UTF-8一个中文占三个字节

encode = s.encode(encoding="UTF-8")
decode = encode.decode(encoding="UTF-8")
print(decode)

在这里插入图片描述

3.9.12 字符串总结

在这里插入图片描述

四、函数 – java中的方法

4.1 函数的创建与调用

在这里插入图片描述
在这里插入图片描述

def calc(a: int, b: int):
    c = a + b
    return c


result = calc(1, 2)
print(result)

4.2 函数参数定义

在这里插入图片描述

# 只能定义一个可变参
# 个数可变的位置参数,入函数后为元组
def fun(*args):
    print(args)
fun(1)
fun(20, 30)
fun(20, 30, "s")
# 个数可变的关键字形参, 结果是字典
def fun1(**args):
    print(args)

fun1(a=10)
fun1(a=200, b=30)

在这里插入图片描述

4.3 函数总结

在这里插入图片描述
在这里插入图片描述

4.4 变量作用域

在这里插入图片描述

4.5 递归函数

python

def fun_(a):
    if a == 1:
        return 1
    else:
        return a * fun_(a-1)


print(fun_(5))

java

public class 递归 {

    public static void main(String[] args) {
        System.out.println(function(3));
    }

    public static int function(int a){
        if (a==1)
            return 1;
        else
            return a * function(a-1);
    }
}

4.6 菲波那切数列

前两项和

def fun_feibo(a):
    if a==1:
        return 1
    elif a==2:
        return 1
    else:
        return fun_feibo(a-1) + fun_feibo(a-2)

# 斐波那契函数第6位上的数字
print(fun_feibo(6))
# 斐波那契函数前6位上的数字
for i in range(1, 7):
    print(fun_feibo(i))

五、异常

5.1 bug的常见类型

5.2 bug的处理

在这里插入图片描述

5.2.1 多except结构

在这里插入图片描述

# bug处理
try:
    a = 1/0
    print(a)
except ZeroDivisionError:
    print("除数不允许为0!")
except BaseException as e:
    print(e)

5.2.2 try…except…else

在这里插入图片描述

5.2.3 finally

在这里插入图片描述

5.2.4 python常见异常

在这里插入图片描述

5.2.5 python异常处理机制

在这里插入图片描述

六、类和对象

6.1 定义python中的类

在这里插入图片描述

6.2 类的创建

在这里插入图片描述

class Student:      #类名,驼峰命名
    native_pace = "长春"      # 直接写在类里边的是

    def __init__(self, name, age):
        self.name=name
        self.age=age
#python中一切皆对象,所以Student也是对象,有内存空间
    #实例方法
    def eat(self):
        print("学生在吃饭")

    @staticmethod
    def method():
        print("静态方法中不能有self参数...")
    @classmethod
    def class_method(cls):
        print("类方法,里边有cls...")

#-- 类之外是函数,类之内是方法
def drink(self):
    print("学生在喝水")


#创建Student对象

student = Student("小明", 20)
print(student.name)
student.eat()
student.method()
student.class_method()

6.3 类属性、方法、静态方法

在这里插入图片描述

6.4 动态绑定属性和方法

在这里插入图片描述

在这里插入图片描述

七、封装、继承、多态

在这里插入图片描述

7.1 封装

class Student:      #类名,驼峰命名
    native_pace = "长春"      # 直接写在类里边的是

    def __init__(self, name, age):
        self.name=name
        self.__age=age  #年龄不希望被外部使用,加__
#python中一切皆对象,所以Student也是对象,有内存空间
    #实例方法
    def eat(self):
        print("学生在吃饭")
    #实例方法
    def show_age(self):
        print(self.__age)
    @staticmethod
    def method():
        print("静态方法中不能有self参数...")
    @classmethod
    def class_method(cls):
        print("类方法,里边有cls...")
#类外部可以通过show_age查看到__age
student.show_age()
# 怎么直接使用age呢? 所以在类的外边可以通过_Student__age访问,java中的反射?
print(dir(student))
print(student._Student__age)

在这里插入图片描述

7.2 继承 – python可多继承

在这里插入图片描述
在这里插入图片描述

7.2.1 继承的方法重写

在这里插入图片描述

7.2.2 Object类

在这里插入图片描述

7.3 多态

在这里插入图片描述
在这里插入图片描述

7.4 特殊属性和方法

在这里插入图片描述

# 特殊属性
print(student.__dict__)         # 绑定的属性和方法
print(student.__class__)        # 对象所属的类
print(Student.__bases__)        # 对象父类
print(Student.__base__)     #对象继承的第一个父类
print(Student.__mro__)     #对象层次结构
print(A.__subclasses__())     #子类列表

在这里插入图片描述
**python中对象的创建过程: new() -> init() **
在这里插入图片描述

7.5 浅拷贝和深拷贝

在这里插入图片描述

class Cpu:
    pass

class Disk:
    pass

class Computer:

    def __init__(self, cpu, disk):
        self.cpu = cpu
        self.disk = disk

# 1.变量赋值
cpu1 = Cpu()
cpu2 = cpu1
print(cpu1)
print(cpu2)

# 浅拷贝: 只copy对象,不copy属性的引用;
disk = Disk()
computer = Computer(cpu1, disk)

import copy
computer2 = copy.copy(computer)
print(computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)
# 深拷贝: copy对象,copy属性的引用;copy就是新创建出一个对象
computer3 = copy.deepcopy(computer)
print(computer3, computer3.cpu, computer3.disk)

在这里插入图片描述

7.6 总结

在这里插入图片描述

八、模块和包

8.1 模块–.py文件

在这里插入图片描述

8.1.1 模块创建及导入

在这里插入图片描述

8.2 以主程序方式运行程序

防止其他模块引用这个模块的时候执行无用代码
在这里插入图片描述

def add(a,b):
    return a+ b


if __name__ == '__main__':
    print(add(10,20))

8.3 包 – 和java中的包一样

在这里插入图片描述

8.4 python中的内置模块

在这里插入图片描述

8.5 第三方模块的安装及使用

在线安装方式:
在这里插入图片描述

import time
import schedule

def job():
    print("哈哈!")

if __name__ == '__main__':
    print(add(10,20))
    schedule.every(3).seconds.do(job)
    while True:
        schedule.run_pending()
        time.sleep(1)

注意: 使用main的时候def方法需要放在上边, 方法调用没有参数不能加()
如果发生pycharm中报错ModuleNotFoundError
在这里插入图片描述
在这里插入图片描述

8.6 总结

在这里插入图片描述

九、文件相关

9.1 编码格式

在这里插入图片描述

9.2 文件读写原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 读取磁盘文件
file = open("d://test.txt", "r")        # r:读取, w: 写,清空原来内容, a:追加, b: 以二进制方式打开文件,需要和rb/wb一起使用
print(file.readlines())     # readlines是列表


# file = open("d://test.txt", "w")
file = open("d://test.txt", "a")
file.write("hello appending")

# 从test.txt读,然后写入到test_1.txt
file_open = open("d://test.txt", "rb")
file_write = open("d://test_1.txt", "wb")
file_write.write(file_open.read())
file_open.close()
file_write.close()
file.close()

在这里插入图片描述

9.3 文件对象的常用方法

在这里插入图片描述

9.4 with语句

在这里插入图片描述

# 不需要使用close()关闭资源
with open("d://test.txt", "rb") as file:
    with open("d://test_1.txt", "wb") as file_rw:
        file_rw.writelines(file.readlines())
    # print(file.read())

9.5 os模块常用函数

在这里插入图片描述
os操作目录相关函数
在这里插入图片描述
os.walk(path) 遍历指定目录下的所有文件和目录

9.6 总结

在这里插入图片描述

9.7 Python中如何将文件保存为utf-8(带BOM)的格式

因为txt的utf8上传到FDFS乱码,所以需要pyhon保存格式为待bom的utf-8

# 写为带有bom的txt
file_bom_txt = codecs.open("d://test2.txt", mode="w", encoding='utf_8_sig')
file_bom_txt.write("测试bom文件!")
file_bom_txt.close()

十、python操作数据库

# coder: lixy
# time: 2021/6/8 14:15
# 写符号库增删改查代码
import json

from flask import Flask, request, jsonify
from flask_cors import CORS

# 连接数据库
import pymysql

# 1. 建立数据库连接
db_connection = \
    pymysql.connect(host="127.0.0.1", user="root", password="root", database="atlas", port=3306, charset="utf8")
# 2. 创建游标对象
cursor = db_connection.cursor()

# 启动后端服务
app = Flask(__name__)
CORS(app, resources=r'/*')  # 解决跨域访问问题


@app.route("/list", methods=["get"])
def select_list():
    cursor.execute("select * from sm_info")
    # datas是元组()
    datas = cursor.fetchall()
    temp = {}  # 字典
    result = []  # 列表
    if datas is not None:
        for data in datas:
            temp["id"] = data[0]
            temp["sm_name"] = data[2]
            temp["sm_text_param"] = data[17]
            temp["create_time"] = data[23]
            print(temp)
            # copy()创建新的内存,保存数据,并放到列表中,就像java需要new对象一样
            result.append(temp.copy())
    return jsonify(result)


@app.route("/id", methods=["get"])
def select_one():
    id_value = request.args.get("id")
    sql = "select * from sm_info where id={0}".format(id_value)
    cursor.execute(sql)
    # datas是元组()
    data = cursor.fetchone()
    temp = {}  # 字典
    if data is not None:
        temp["id"] = data[0]
        temp["sm_name"] = data[2]
        temp["sm_text_param"] = data[17]
        temp["create_time"] = data[23]
        print(temp)
    return jsonify(temp)


@app.route("/add", methods=["post"])
def add_one():
    symbol_name = request.args.get("symbolName")
    ext_name = request.args.get("extName")
    symbol_path = request.args.get("symbolPath")
    # TODO python怎样通过数据库连接池操作数据库
    i = -1
    # sql = "insert into sm_symbol (symbol_name, ext_name, symbol_path) values (\"驱逐舰\", \"shp\", \"http://xxx:port\")"
    # sql = "insert into sm_symbol (symbol_name, ext_name, symbol_path) values " \
    #       "(\""+ str(symbol_name) +"\", \""+str(ext_name)+"\", \""+str(symbol_path)+"\")"
    sql = "insert into sm_symbol (SYMBOL_NAME, EXT_NAME, SYMBOL_PATH) values (%s, %s, %s)"
    try:
        # 3. 执行sql语句
        i = cursor.execute(sql, (symbol_name, ext_name, symbol_path))
        # i = cursor.execute(sql)
        # 4. 提交数据库事务
        db_connection.commit()
        print("插入数据成功")
    except Exception as e:
        print("插入数据库失败:{}", format(e))
        # 回滚数据库事务
        db_connection.rollback()
        return "删除失败:{}".format(e)
    if i == -1:
        return "插入失败!"
    if i > 0:
        return "插入成功!"


@app.route("/del", methods=["DELETE"])
def del_fun():
    _id = request.args.get("id")
    sql = "delete from sm_symbol where id = {}".format(_id)
    i = -1
    try:
        i = cursor.execute(sql)
        db_connection.commit()
        print("删除数据成功!")
    except Exception as e:
        db_connection.rollback()
        print("删除数据失败:{}", format(e))
        return "删除失败:{}".format(e)
    if i > 0:
        return "删除成功!"
    if i==0:
        return "数据不存在!"

@app.route("/edit", methods=["PUT"])
def update_fun():
    _id = request.args.get("id")
    symbol_name = request.args.get("symbolName")
    ext_name = request.args.get("extName")
    symbol_path = request.args.get("symbolPath")
    # 为什么会报错,那是因为使用的pymysql在插入数据的时候,如果是vchar类型的,需要加入单引号, 用repr()
    sql = "update sm_symbol set symbol_name={} , ext_name={} , symbol_path={} where id={}" \
        .format(repr(symbol_name), repr(ext_name), repr(symbol_path), _id)
    print(sql)
    i = -1
    try:
        i = cursor.execute(sql)
        db_connection.commit()
    except Exception as e:
        print("修改数据失败:{}", format(e))
        db_connection.rollback()
        return "修改失败:{}!".format(e)
    if i > 0:
        print("修改数据成功!")
        return "修改成功!"
    if i==0:
        return "数据不存在!"





if __name__ == '__main__':
    app.run(host="0.0.0.0", port=9999)  # 监听9999端口
    print("服务已启动")
    # 5. 关闭游标
    if cursor:
        cursor.close()
    # 6. 关闭数据库连接
    if db_connection:
        db_connection.close()
    print("交互已完毕!")

注意:

使用的pymysql在插入数据的时候,如果是varchar类型的,str需要加入单引号, 用repr()

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值