Python处理文件?——来这里!txt,csv,xls,json,sql的读写都有!

1.基本操作

1.1文件的打开和关闭

通常使用python的内建函数open()函数来打开文件,使用with语句或者文件对象的close()方法来关闭文件。

1.1.1 打开文件 open()函数

open(file, mode=’r’, buffering=1, encoding=None, errors=None, newline=None,
closefd=True, opener=None)[ ]

对于一般文件,设置前两个参数就够用了。

  1. file参数是一个路径,表示要打开的文件的路径
  2. mode表示文件的打开方式,默认r,只读模式
  3. buffering参数是一个可选的整数,用于设置缓冲策略。若取0则切换缓冲(仅允许在二进制模式下),取1则选择行缓冲(仅在文本模式下可用),若取>1的整数则指定以字节为单位的块缓冲区的大小。如果没有给出buffering参数,则默认二进制文件以固定大小的块进行缓冲,通常为4076或8172字节,且文本文件使用行缓冲。
  4. encoding参数指定用于解码或编码文件的编码,仅在文本模式下使用。默认编码是依赖平台的,可通过locale.getpreferredencoding()获知,encoding参数可取任何Python支持的文本编码,常用编码包括’ascii’、’gbk’、’utf-8’等。
  5. errors参数是一个可选的字符串,用于指定如何处理编码和解码错误,跟encoding参数一样仅在文本模式下使用。encoding参数可取任何codecs.register_error()中注册过的标准错误处理名称。
  6. newline参数仅适用于文本模式,用于指定读写操作时采用的换行模式。
    • 在读取模式下,如果newline为None,则启用通用换行模式,文件中的以’\n’、’\r’或’\r\n’结尾的行均被翻译为’\n’;如果newline是空值,则行结尾不进行翻译,直接返回;如果newline是任何其他合法值,则行由给定字符串终止,并将行结尾返回调用者。
  7. 在写入模式下,如果newline为None,则写入的任何’\n’字符都将转换为系统默认行分隔符;如果newline是’’或’\n’,则不进行翻译;如果newline是任何其他合法值,则写入的任何’\n’字符将被转换为给定的字符串。
  8. closefd参数是一个可选的布尔值,默认为True。如果closefd是False且给出的是文件描述符而不是文件名,则当文件关闭时,底层文件描述符将保持打开状态。如果给出的是文件名则closefd必须为True,否则将引发错误。
  9. opener参数用于使用自定义开启器,通过使用参数file和flags能获得文件对象的基础文件描述符。

1.1.2 关闭文件

关闭文件的含义是将文件对象与外存上的文件脱离联系,释放打开文件时占用的资源。

  • with关键字
with open('workfile.txt','r') as f
	read_date = f.read() #文件操作代码块

缩进内部都是with的作用范围,缩进部分结束后,python会自动关闭文件

  • closed()方法
f.closed()

2.txt文件读写

2.1 文件读取

2.1.1 f.read(size=-1)

f.read(size=-1):从文件中读取size指定的字符数并将其作为字符串(文本模式下)或字节对象(二进制模式下)返回。size是一个可选的数字参数,如果未给定size或size为负数,则读取并返回文件的全部内容。如果已到达文件末尾,f.read()将返回一个空字符串“”。

2.1.2 f.readline()

f.readline():从文件中读取一行内容,返回的字符串末尾为换行符’\n’,如果文件不以换行符结尾,则在文件的最后一行省略。空行用’\n’表示,该字符串只包含一个换行符。如果已到达文件末尾,f.readline()将返回一个空字符串。

2.1.3 f.readlines(hint=-1)

f.readlines(hint=-1)从文件中读取hint指定的行数,如果未给定hint或hint为负数,则读取所有行内容,并返回以每行内容为元素形成的一个列表。

2.1.4 for循环遍历

for line in f:
	print(line, end=’’)

通过循环遍历文件对象来读取文件中的行

2.2 文件写入

2.2.1 f.write(string)

f.write(string):向文件中写入string字符串,并返回写入的字符数,且不会自动在字符串末尾添加‘\n’换行字符。

2.2.2 f.writelines(sequence)

f.writelines(sequence):向文件中写入sequence字符串列表,不会自动在字符串末尾添加‘\n’换行字符。

2.3 指针随机读写

在对文件进行读写操作时,文件对象的位置指针指向当前读写的位置,顺序读写一个字符后,该位置指针自动移动指向下一个字符。

  • f.seek(offset,startpoint=0)
    • startpoint参数可缺省,默认值为0,即从文件开始进行读写,1表示当前位置,2表示从末尾计算。
    • offset偏移量指以startpoint为基点,往后移动的字节数。
  • f.tell()
    • 返回当前的指针位置

3.csv文件读写

首先import csv,没有可以pip安装

3.1 普通读写

3.1.1csv.reader(csvfile, dialect=’excel’, **fmtparams)

该函数用于从csv文件中读取数据,返回一个在给定的csvfile中的行上迭代的reader对象。

  • csvfile是文件对象或列表对象,如果csv是文件对象,则应该使用newline=’’打开它;
  • dialect是一个可选参数,用于指定csv文件的格式,包括一系列特定参数的取值,可以是Dialect类的子类实例或者由list_dialect()函数返回的字符串,默认值是excel,即以逗号为分隔符;
  • 其他可选的fmtparams关键字参数用于指定当前dialect状态下特定的格式参数,可以覆盖dialect中的格式。
    eg:
import csv
with open('eggs.csv', newline='') as csvfile: 						#使用with语句保证文件关闭
	spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') 	#构造reader对象
	for row in spamreader: 											#循环遍历每行数据
		print(','.join(row)) 										#以逗号为分隔符输出数据

3.1.2 csv.writer(csvfile, dialect=’excel’, **fmtparams)

writer函数用于向csv文件写入数据,返回一个writer对象,负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。

  • csvfile可以是具有write()方法的任何对象。如果csvfile是文件对象,则应使用newline=’’打开它。
  • dialect参数可选,用于定义特定于当前csv dialect的一组参数,它可以是方言类的子类的实例,也可以是list_dialogens()函数返回的字符串之一,默认值是excel,即以逗号为分隔符。
  • 其他可选的fmtparams关键字参数可用于覆盖当前dialect中的单个格式参数。

writer对象的writerow方法能够写入一行数据,writerrows方法写入多行数据。

import csv
with open('eggs.csv', 'w', newline='') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|',quoting=csv.QUOTE_MINIMAL) #构造writer对象
spamwriter.writerow(['Spam'] * 5 + ['Baked Beans']) #写入行
spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

3.2 以字典形式读写

3.2.1 DictReader类

csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)
上述语句创建一个DictReader对象,将每行中的信息映射到一个ordereddict上。该ordereddict对象的键由可选的fieldname参数给定。

  • fieldnames参数是一个序列,如果省略了该参数,则文件f第一行中的值将用作字段名。
  • 如果一行中的字段多于字段名,则剩余数据将放入列表中,并使用restkey指定的字段名存储(默认为无)。
  • 如果非空行的字段少于字段名,则缺少的值将用’None’填充。不管字段名是如何确定的,有序字典都会保留其原始顺序。所有其他可选参数或关键字参数都将传递给基础reader实例。
import csv
with open('names.csv', newline='') as csvfile:
	reader = csv.DictReader(csvfile) #构造DictReader对象
	for row in reader: #循环遍历reader中的行
		print(row['first_name'], row['last_name']) #输出名和姓

3.2.2 DictWriter类

csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

  • FieldNames参数是一个键序列,用于标识传递给writeRow()方法的字典中的值写入文件f的顺序。
  • restval参数可选,用于指定当字典在FieldNames中缺少键时要写入的值。
  • 如果传递给writerow()方法的字典包含在字段名中找不到的键,则可选的extrasaction参数指示要采取的操作。如果将其设置为“raise”,则会引发默认值ValueError;如果设置为“ignore”,则忽略字典中的额外值。
  • 任何其他可选参数或关键字参数都将传递给基础writer实例。
  • 注意,与DictReader类不同,DictWriter类的fieldname参数不是可选的。
import csv
with open('names.csv', 'w', newline='') as csvfile:
	fieldnames = ['first_name', 'last_name'] #定义键序列
	writer = csv.DictWriter(csvfile, fieldnames=fieldnames) #构造DictWriter对象
	writer.writeheader() #写入构造函数指定的字段名
	writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'}) #写入行
	writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
	writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

3.3 Reader对象的方法和属性

csv模块提供了对于Reader对象的方法和属性,可用于DictReader实例和由reader()函数返回的对象。

  • Reader对象的通用方法:
    • csvreader.__next__():将可迭代的Reader对象的下一行内容作为列表(如果对象由read()函数返回)
      或字典(如果对象是一个DictReader实例)返回。
  • Reader对象的共有属性:
    • csvreader.dialect:解析器正在使用的dialect的只读描述。
    • csvreader.line_num:从源迭代器中读取的行数,与返回的记录数不同,因为记录可以跨多行。
  • DictReader对象独有的共有属性:
    • DictReader.fieldnames:如果在创建对象时未作为参数传递,则在第一次访问或从文件中读取第一条记录时初始化此属性。

3.4 Writer对象的方法和属性

csv模块提供了对于Writer对象的方法和属性,可用于DictWriter实例和由writer()函数返回的对象。对于Writer对象,行必须是可迭代的字符串或数字,对于DictWriter对象,行必须是将字段名映射为字符串或数字的字典(首先通过str()传递)。

  • Writer对象的通用方法:
    • csvwriter.writerow(row):将row参数写入Writer的文件对象,并根据当前dialect进行格式化。
    • csvwriter.writerows(rows):将rows中的所有元素(一个可迭代的行对象)写入Writer的文件对象,
      并根据当前dialect进行格式化。
  • Writer对象的共有属性:
    • csvwriter.dialect:当前Writer对象正在使用的dialect的只读描述。
  • DictWriter对象独有的通用方法:
    • DictWriter.writeheader():写入一行在构造函数中指定的字段名。

4.xls与xlsx文件读写

  • xls是2003及以前版本生成的文件格式,是一个特有的二进制格式,其核心结构是复合文档类型的结构,
  • xlsx是2007及以后版本生成的文件格式,且2007之后版本可以打开xls格式的文件,核心结构是XML类型的结构,采用的是基于XML的压缩方式,使其占用的空间更小。

通常可以使用xlrd模块与xlwt模块实现对excel文件内容读取和写入。

4.1 xlrd模块

xlrd模块实现内容读取
import xlrd

4.1.1 打开文件

打开example文件并获取所有sheet的名称
文件打开:xlrd.open_workbook(r'path')
获取所有表单的名称:表.sheet_names()

import xlrd
data = xlrd.open_workbook(r'F:\example.xlsx')
sheet_name = data.sheet_names() #获取所有sheet的名称
print(sheet_name)

4.1.2 获取工作表

  • 使用sheets()[index]函数通过索引获取表单,其中,index表示表单的索引;
  • 通过sheet_by_index(num)函数的方式获取表单,其中,num表示表单的索引。
    -通过sheet_by_name(name)函数的方式获取表单,其中,name表示表单的名称。
#通过sheet页的索引获取sheet表
workbook1 = data.sheets()[0]
print(workbook1)
#另一种索引方式
workbook1 = data.sheet_by_index(1)
print(workbook1)
#通过sheet页的名字获取sheet表
workbook1 = data.sheet_by_name('STUDENT')
print(workbook1)

4.1.3 获取工作表的行数和列数

  • 获取行数:工作表.nrows
  • 获取列数:工作表.ncols
num_rows = workbook1.nrows
print("STUNDT工作表行数为:",num_rows)
num_cols = workbook1.ncols
print("STUNDT工作表列数为:",num_cols)

4.1.4 获取整行和整列的值

row_values()函数和col_values()函数分别被用于获取表单中整行和整列的表单内容,括号中可以填写数值,表示获取第几行或第几列的内容。

first_row = workbook1.row_values(0)
print(first_row)
first_col = workbook1.col_values(0)
print(first_col)

使用上述方法再结合前面获取的行数或者列数,加上for循环就可以遍历获取表的全部值

4.1.5 获取特定单元格的值

cell(row, col).value,其中row的值表示所在行,col的值表示所在列;
cell_value(row, col)获取指定行列的单元格的值
row()[].value,小括号填写行数,中括号写列数

print('第1 行1列内容:', workbook1.cell(0,0).value) # 第1 行1列内容
print('第2 行1列内容:',workbook1.cell_value(1,0)) # 第2 行1列内容
print('第3 行2列内容:',workbook1.row(2)[1].value) # 第3 行2列内容

4.2 xlwt模块

xlwt模块实现内容写入

4.2.1 创建工作簿

xlwt模块中可以使用xlwt.Workbook()创建工作簿,之后通过add_sheet()函数在创建的工作簿中添加新的表单,使用write()函数将需要输入的内容写入表单中,使用形式为:sheet1.write(row,col,label = 'str’)
sheet1为表单的名称,row可以指定单元格的行,col指定单元格的列,label指定需要输入的内
容。

import xlwt
workbook = xlwt.Workbook(encoding = 'utf-8') #创建第一个sheet
sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
sheet1.write(0,0,label = 'just a test') #参数对应行,列,值
workbook.save('E:\example1.xls') #表格存储文件夹路径

save()函数用于指定工作簿的保存路径

4.2.2 单元格格式设置

font = xlwt.Font()为样式创建字体
设置如下,更多设置可以查看官方文档

import xlwt
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = 'Times New Roman'
font.bold = True # 黑体
font.underline = True # 下划线
font.italic = True # 斜体字
style.font = font # 设定样式
sheet1.write(0, 0, 'Unformatted value') # 不带样式的写入
sheet1.write(1, 0, 'Formatted value', style) # 带样式的写入
workbook.save('E:\example1.xls') # 保存文件
sheet1.col(0).width = 3333  # 设置单元格宽度
sheet1.col(0).height = 3333 # 设置单元格高度
workbook.save('E:\example1.xls') # 保存文件

5.json文件读写

JSON是JavaScript对象的字符串表示法,使用文本表示一个JavaScript对象的信息,本质是一个字符串。JSON键值对是用来保存JS对象的一种方式,键值对组合中的键名写在前面并使用双引号,使用冒号分隔,然后是值,例如:{"firstName": "Json"},等价于以下JavaScript语句:{firstName : "Json"}
Python的json模块能够实现Python对象和JSON格式之间的互相转换,即序列化和反序列化。使用json模块需要使用import json语句导入该模块。json模块的dump方法和dumps方法将Python对象序列化(编码)为JSON格式字符串,load方法和loads方法将JSON格式反序列化(解码)为Python对象。另外,json模块还提供了编码器类JSONDecoder和解码器类JSONEncoder,支持自定义的编码和解
码操作。

5.1 json.dump()方法

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True,cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

  • obj: 表示是要序列化的对象。
  • fp: 文件描述符,将序列化的str保存到文件中。json模块总是生成str对象,而不是字节对象;因此,fp.write()必须支持str输入。
  • skipkeys: 默认为False,如果skipkeysTrue,(默认值:False),则将跳过不是基本类型(str,int,float,bool,None)的dict键,不会引发TypeError。
  • ensure_ascii: 默认值为True,能将所有传入的非ASCII字符转义输出。如果ensure_ascii为False,则这些字符将按原样输出。
  • check_circular:默认值为True,如果check_circular为False,则将跳过对容器类型的循环引用检查,循环引用将导致OverflowError。
  • allow_nan: 默认值为True,如果allow_nan为False,则严格遵守JSON规范,序列化超出范围的浮点值(nan,inf,-inf)会引发ValueError。 如果allow_nan为True,则将使用它们的JavaScript等效项(NaN,Infinity,-Infinity)。indent: 设置缩进格式,默认值为None,选择的是最紧凑的表示。
  • Indent:如果indent是一个非负整数或者字符串,那么JSON数组元素和对象成员会被美化输出为该值指定的缩进等级。如果缩进等级为零、负数或者 “”,则只会添加换行符。None(默认值)选择最紧凑的表达。使用一个正整数会让每一层缩进同样数量的空格。如果indent是一个字符串(比如"\t"),会被用于缩进每一层。
  • separators:参数应当是一个 (item_separator, key_separator) 元组,用于指定键值之间的分隔符。当 indent 为 None 时,默认值取 (’, ', ': ‘)。
  • default: 默认值为None,如果指定,则default应该是为无法以其他方式序列化的对象调用的函数。它应返回对象的JSON可编码版本或引发TypeError。如果未指定,则引发TypeError。
  • sort_keys: 默认值为False,如果sort_keys为True,则字典的输出将按键值排序。

该方法能够将obj序列化为一个JSON格式的流并输出到一个支持.write()方法的文件类对象fp。由于json 模块始终产生 str 对象而非 bytes 对象,fp.write() 必须支持字符串输入。

5.2 json.dumps()方法

json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True,cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
参数含义同上
该方法能够将obj序列化成JSON格式的字符串并返回

5.3 json.load()方法

json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None,parse_constant=None, object_pairs_hook=None, **kw)

  • 如果指定了parse_float,它会被调用于每个要被解码的JSON浮点数的字符串。默认情况下,这相当于函数float(num_str)。这可以用于为JSON浮点数使用另一个数据类型或解析器,例如decimal.decimal
  • 如果指定了parse_int,它会被调用于每个要解码的JSON整数的字符串。默认情况下,这相当于函数int(num_str)。这可用于为JSON整数使用另一个数据类型或解析器,例如float。
  • 如果指定了parse_constant,它会被调用于以下字符串之一:“-Infinity”、“Infinity”、“NaN”。如果遇到无效的JSON数字,可以使用此方法来引发异常。
  • 通过cls关键字参数来指定使用自定义JSONDecoder子类,否则将使用JSONDecoder。其他关键字参数将传递给类的构造函数。
  • object_hook 是一个可选的函数,它会被调用于每一个解码出的对象字面量,即一个字典dict。 object_hook 的返回值会取代原本的 dict,能够被用于实现自定义解码器。
  • object_pairs_hook是一个可选的函数,它会被调用于任何解码出的按顺序排列的对列表对象。将使用该函数的返回值而不是dict,能够用于实现自定义解码器。如果还定义了object_hook,则object_pairs_hook优先。

该方法将一个支持 .read()方法并包含一个JSON文档的文本文件或者二进制文件的fp反序列化为一个Python对象。如果要反序列化的数据不是有效的JSON文档,则会引发JSONDecoderError。

5.4 json.loads()方法

json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
该方法将s反序列化为Python对象,s可为一个包含JSON文档的字符串、字节对象或字节数组。
参数含义与load()相同
通俗的说就是让json的字符串变成python可读,易读的类型

import json
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') #反序列化

5.5 json.JSONDecoder()函数

json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
这是一个简单的JSON解码器的构造函数。默认情况下,依照以下规则进行解码,见表。

JSON数据类型Python数据类型
objectdict
arraylist
stringstr
number(int)int
number(real)float
trueTrue
falseFalse
nullNone
  • 如果strict参数为False(默认为True),则字符串中允许使用控制字符。控制字符是字符代码在0-31范围内的字符,包括’\t’、’\n’、’\r’和’\0’。其他参数含义与load()内相同,
  • 如果要反序列化的数据不是有效的JSON文档,则会引发JSONDecoderError。

5.6 json.JSONEncoder()函数

json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)
这是一个简单的JSON编码器的构造函数。参数含义与dump()内相同
编码规则见上表

6.sql文件读写

由于MySQL服务器以独立的进程运行,并通过网络对外服务,所以,需要支持Python的MySQL驱动来连接到MySQL服务器。可以通过Python包管理工具pip进行安装,使用命令
pip3 install PyMySQL
为测试是否成功安装PyMySQL,可以创建一个python文件,代码为:import pymysql若执行代码后运行未出现任何错误,则表示安装成功。

6.1 连接数据库

python对sql文件的读写主要通过应用程序编程接口(API)进行,DB-API接口是python中访问关系型数据库的标准API,其主要函数为:

  • connect() :连接数据库 , 参数包含用户名 、 密 码 、 服务器地址 等 , 具体为pymysql.connect(host=“数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
  • cursor():创建一个cursor对象来管理查询;
  • execute()executemany():对数据库执行一个或多个SQL命令;
  • fetchone()fetchmany()fetchall():得到execute之后的结果。

6.2 创建操作

通过pymysql第三方库可以使用sql语句向在数据库中创建一张新的数据库和新的表格,具体创建表格的sql语句为:

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)

使用创建语句时需要借助execute()对数据库执行,如在创建一个名为test的数据库,并在其中创建一张名称为TESTDB的二维表。

import pymysql
con=pymysql.connect(host='loscalhost',user='root',password='password',charset
='UTF8MB4')
cur = con.cursor()
cur.execute("create database test character set UTF8MB4;") #创建test数据库
cur.execute("use test;")
cur.execute("create table TESTDB(FIRST_NAME char(20), LAST_NAME char(20), AGE int(10), SEX char(20))") #创建TESTDB二维表并初始化

6.3 插入操作

sql语法为:INSERT INTO 表名称 VALUES (值1, 值2,....)
python借助execute()对数据库执行

import pymysql
db = pymysql.connect("localhost","testuser","test","TESTDB" ) # 打开数据库连接
cursor = db.cursor() # 使用cursor()方法获取操作游标
sql = """INSERT INTO students (FIRST_NAME, LAST_NAME, AGE, SEX) VALUES ('Jenny', 
'Black', 21, 'F')""" # SQL 插入语句
try: 
	cursor.execute(sql) # 执行sql语句
	db.commit() # 提交到数据库执行
except: 
	db.rollback() # 如果发生错误则回滚
db.close() # 关闭数据库连接

6.4 查询操作

Python查询Mysql一般使用fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

  • fetchone():该方法获取下一个查询结果集,结果集是一个对象
  • fetchall():接收全部的返回结果行.
  • rowcount:这是一个只读属性,并返回执行execute()方法后影响的行数。

查询students表中age(年龄)字段大于18的所有数据,示例如下:

import pymysql
db = pymysql.connect("localhost","testuser","test","TESTDB" ) # 打开数据库连接
cursor = db.cursor() # 使用cursor()方法获取操作游标
sql = "SELECT * FROM students WHERE age > %s" % (18)# SQL 查询语句
try:
	cursor.execute(sql) # 执行SQL语句
	results = cursor.fetchall() # 获取所有记录列表
	for row in results:
		FIRST_NAME = row[0]
		LAST_NAME = row[1]
		AGE = row[2]
		SEX = row[3]
		print " FIRST_NAME=%s, LAST_NAME=%s, AGE=%s, SEX=%s " %(fname, lname, age, sex)# 打印结果
except:
	print "Error: unable to fecth data"
db.close() # 关闭数据库连接

6.5 修改操作

sql语法为:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
以下实例将students表中的SEX字段为’F’的AGE字段减1。

import pymysql
db = pymysql.connect("localhost","testuser","test","TESTDB" ) #打开数据库连接
cursor = db.cursor() # 使用cursor()方法获取操作游标
sql = "UPDATE students SET AGE = AGE - 1 WHERE SEX = '%c'" % ('F')
#SQL 更新语句
try:
	cursor.execute(sql) # 执行SQL语句
	db.commit() # 提交到数据库执行
except:
	db.rollback() # 发生错误时回滚
db.close() # 关闭数据库连接

删除操作

sql语法为:DELETE FROM 表名称 WHERE 列名称 = 值
以下实例将students表中的AGE字段小于18记录删除。

import pymysql
db = pymysql.connect("localhost","testuser","test","TESTDB" ) #打开数据库连接
cursor = db.cursor() #使用cursor()方法获取操作游标
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20) #SQL 删除语句
try:
	cursor.execute(sql) # 执行SQL语句
	db.commit() # 提交修改
except:
	db.rollback() # 发生错误时回滚
db.close() # 关闭数据库连接
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CI_FAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值