首页 > 数据库 >33. 数据库编程

33. 数据库编程

时间:2023-09-17 19:12:46浏览次数:48  
标签:execute 33 数据库 编程 游标 cursor result user

一、数据库编程接口

  程序运行的时候,数据都是在内存中的。当程序终止的时候,通常都需要将数据保存到磁盘上。为了便于程序保存的读取数据,并能直接通过条件查询跨快速查询指定的数据,就出现了数据库(Database)这种专门用于集中存储和查询的软件。

  在 Python 中提供了数据库连接对象,它提供了获取数据库游标对象和提交/回滚事务的方法,以及如何关闭数据库连接。

【1】、获取连接对象

  我们可以使用 connect() 函数获取连接对象,该函数有多个参数,具体使用哪个参数,取决于使用的数据库类型。connect() 方法返回连接对象,这个对象表示目前和数据库的会话。连接对象支持的方法如下:

close()                                 # 关闭数据库连接
commit()                                # 提交当前事务
rollback()                              # 取消当前事务
cursor()                                # 使用该连接创建(并返回)一个游标对象

【2】、获取游标对象

  游标对象代表数据库中的游标,用于指示抓取数据操作的上下文。主要提供执行 SQL 语句、调用存储过程、获取查询结果等方法。我们可以通过使用连接对象的 cursor() 方法获取游标对象。

  游标对象的常用属性如下:

arraysize               # 使用fetchmany()方法时,一次取出的结果行数,默认为1
connection              # 创建此游标的连接
description             # 返回游标活动状态(7项元组):(name,type_code,display_size,internal_size,precision,scale,null_ok),只有name和type_code是必须的
lastrowid               # 上次修改行的ID,如果不支持行ID,则返回None
rowcount                # 上次execute()方法处理或影响的行数

  游标对象的常用方法如下:

callproc(procname[,parameters])         # 调用存储过程
close()                                 # 关闭游标
execute(operation[,parameters])         # 执行数据库查询或命令
executemany(operation,seq_of_params)    # 批量执行数据库查询或命令
fetchone()                              # 获取查询结果集的下一条记录
fetchmany(size)                         # 获取指定数量的记录
fetchall()                              # 获取结果集的所有记录
nextset()                               # 跳转下一个可用的结果集(如果支持)
setinputsizes(sizes)                    # 设置在调用execute()方法是分配的内存区域大小
setoutputsize(sizes)                    # 设置列缓冲区大小

二、使用SQLite数据库

  与许多其它数据库管理系统不同,SQLite 不是一个客户端/服务器结构的数据库引擎,而是一种嵌入式数据库,它的数据库就是一个文件。SQLite 将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。

  由于 Python 中已经内置了 SQLite3,所以我们可以直接使用 import 语句导入 SQLite3 模块,无需安装任何其它的模块,可以直接使用。

import sqlite3

connection = sqlite3.connect("test.db")         # 获取连接
cursor = connection.cursor()                    # 获取游标

# 执行SQL语句,创建表
cursor.execute("create table if not exists user(name varchar(20), age int)")

# 向表中插入数据,新增用户信息
cursor.execute("insert into user(name,age) values('Sakura',10)")
cursor.execute("insert into user(name,age) values('Mikoto',14)")
cursor.execute("insert into user(name,age) values('Shana',15)")

# 执行查询结果
cursor.execute("select * from user")
# 获取查询结果
result = cursor.fetchone()                     # 使用fetchone()获取一条记录
print(result,end="\n\n")

result = cursor.fetchmany(2)                   # 使用fetchmany()获取多条记录
print(result,end="\n\n")

result = cursor.fetchall()                     # 使用fetchall()获取全部查询结果
print(result,end="\n\n")

# 修改用户信息
# 使用问号作为占位符代替具体的数值,然后使用一个元组来替代问号
# 使用占位符的方式可以避免SQL注入的风险
cursor.execute("update user set age = ? where name = ?",(12,"Sakura"))
cursor.execute("select * from user where name = ?",("Sakura",))
result = cursor.fetchall()
print(result,end="\n\n")

# 删除用户数据
cursor.execute("delete from user where name = ?",("Shana",))
cursor.execute("select * from user")
result = cursor.fetchall()
print(result,end="\n\n")

cursor.close()                                  # 关闭游标
connection.close()                              # 关闭数据库

三、使用MySQL数据库

  在 Python 中支持 MySQL 的数据库模块有很多,这里我们选择使用 PyMySQL。我们可以在 cmd 中使用 pip 命令安装:

pip intall PyMySQL
import pymysql

# 打开数据库连接
db = pymysql.connect(
    user="root",                                # 用户名
    password="abc123",                          # 密码
    host="localhost",                           # 主机地址
    port=3306,                                  # 端口号
    database="db_test",                         # 数据库名
)

# 使用cursor()方法创建一个游标对象cursor
cursor = db.cursor()

data = [
    ('Sakura',10),
    ('Mikoto',14),
    ('Shana',15),
]

try:
    # 使用execute()方法,执行SQL语句,创建表
    cursor.execute("create table if not exists user(name varchar(20), age int)")

    # 向表中插入数据,新增用户信息
    # 执行sql语句,插入多条记录
    # 不管字段是什么类型的,占位符统一是%s
    cursor.executemany("insert into user(name,age) values(%s,%s)",data)
    db.commit()                                 # 提交数据
except:
    db.rollback()                               # 发生错误时回滚

# 执行查询结果
cursor.execute("select * from user")
# 获取查询结果
result = cursor.fetchone()                      # 使用fetchone()获取一条记录
print(result,end="\n\n")

result = cursor.fetchmany(2)                    # 使用fetchmany()获取多条记录
print(result,end="\n\n")

result = cursor.fetchall()                      # 使用fetchall()获取全部查询结果
print(result,end="\n\n")

# 修改用户信息
# 使用问号作为占位符代替具体的数值,然后使用一个元组来替代问号
# 使用占位符的方式可以避免SQL注入的风险
try:
    cursor.execute("update user set age = %s where name = %s",(12,"Sakura"))
    db.commit()
except:
    db.rollback()

cursor.execute("select * from user where name = %s",("Sakura",))
result = cursor.fetchall()
print(result,end="\n\n")

# 删除用户数据
try:
    cursor.execute("delete from user where name = %s","Shana")
    db.commit()
except:
    db.rollback()

cursor.execute("select * from user")
result = cursor.fetchall()
print(result,end="\n\n")

cursor.close()                                  # 关闭游标
db.close()                                      # 关闭数据库连接

标签:execute,33,数据库,编程,游标,cursor,result,user
From: https://www.cnblogs.com/kurome/p/17709483.html

相关文章

  • MySQL数据库管理
    MySQL数据库管理数据库-->数据表-->行(记录):用来描述一个对象的信息列(字段):用来描述对象的一个属性常用的数据类型:int:整型无符号[0,2^32-1],有符号[-2^31,2^31-1]float:单精度浮点4字节32位double:双精度浮点8字节64位char:固定长度的字符类型varchar:可变长度的字符类型......
  • 《Java编程思想第四版》学习笔记28--关于StreamTokenizer
    //:SortedWordCount.java//Countswordsinafile,outputs//resultsinsortedform.importjava.io.*;importjava.util.*;importc08.*;//ContainsStrSortVectorclassCounter{privateinti=1;intread(){returni;}voidincrement(){i++;}}pu......
  • 利用SharedArrayBuffer进行多线程编程
    利用SharedArrayBuffer进行多线程编程在现代Web应用程序中,性能是一个至关重要的因素。为了提高Web应用程序的性能,我们经常需要执行并行计算,例如图像处理、音频处理或数据分析。在这种情况下,多线程编程是一种强大的工具,它允许我们充分利用多核处理器。然而,多线程编程并不是一件容易......
  • 数据库中的基本函数
    数据库中的函数1字符串函数concat(s1,s2,...,sn)字符串拼接,将s1,s2,...,sn拼接成一个字符串lower(str)将字符串str全部转为小写upper(str)将字符串str全部转为大写lpad(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度rpad(str,n,pad)右填充,用字符串pad......
  • Socket编程:htons()、htonl()、ntohs()、ntohl()
    前言在计算机网络学到Socket编程的时候,自己在Linux下用C语言试验了一番,发现了这四个古怪的函数:htons()、htonl()、ntohs()、ntohl()。查阅资料得知,这是涉及到网络字节序与主机字节序的转换。字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序。主机字节......
  • Unix/Linux系统编程学习笔记第九章
    《信息安全系统设计与实现》第二周学习笔记第九章I/O库函数I/O库函数与系统调用每个I/O库函数的根都在对应的系统调用函数中系统调用函数open()read()write()lseek()close()I/O库函数fopen()fread()fwrite()fseek()fclose()I/O库函数的算法fread算法:(1)第一......
  • Rockchip RK3399 - USB OTG和extcon驱动
    一、USBOTGUSB是主从模式的总线,主机称为Host,丛机称为Device(设备)。从机与从机之间、主机与主机之间(不包括USB4.0),不能互联。每次通信都是由主机发起,从机不能主动发起通信,只能被动的应答主机的请求。USBOTG(On-The-Go)是一个扩展的USB标准,允许USB设备之间直接进行通信,而无需通......
  • 如何修改MySQL数据库名称
    需求比如数据库名称old_db想改名为new_dbMySQL修改数据库名称比较麻烦,不支持直接修改,需要通过其它方式间接达到修改数据库名称的目的。在MySQL5.1.23之前的旧版本中,我们可以使用RENAMEDATABASE来重命名数据库,但此后版本,因为安全考虑,删掉了这一命令。先导出数据,再导入数......
  • 复习C语言-题目 1008: [编程入门]成绩评定
    题目描述给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90分以及90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。输入格式一个整数0-100以内输出格式一个字符,表示成绩等级样例输入复制90样例输出复制A1#inclu......
  • 复习C语言-题目 1009: [编程入门]数字的处理与判断
    题目描述给出一个不多于5位的整数,要求1、求出它是几位数2、分别输出每一位数字3、按逆序输出各位数字,例如原数为321,应输出123输入格式一个不大于5位的数字输出格式三行第一行位数第二行用空格分开的每个数字,注意最后一个数字后没有空格第三行按逆序输出......