Python内置模块sqlite3操作数据库

102次阅读
没有评论

共计 1898 个字符,预计需要花费 5 分钟才能阅读完成。

字段类型

字段名 数据类型
name text 字符串
gpa real 小数
age integer 整数
photo blob 二进制数据(如图片)
birthday date 日期(本质上是 text)
register time datetime 日期 + 时间(本质上是 text)

插入数据

import sqlite3

db = sqlite3.connect('test.db')  # 连接数据库,若不存在则自动创建
cursor = db.cursor()  # 获取光标

sql = """create table if not exists student (id integer primary key,
name text, gpa real, birthday date, age integer, picture blob)"""
cursor.execute(sql)  # 执行 SQL 命令

mylist = [(100, '张三', '3.25', '2002-01-01', 11, None),
          (101, '李四', '3.35', '2003-01-01', 17, None)]
for s in mylist:
    cursor.execute('replace into student values(?,?,?,?,?,?)',
                   (s[0], s[1], s[2], s[3], s[4], s[5]))
db.commit()  # 真正写入数据库

cursor.close()
db.close()

查询数据

import sqlite3

db = sqlite3.connect('test.db')
cursor = db.cursor()

sql = '''select * from student'''
cursor.execute(sql)
x = cursor.fetchone()  # 获取满足条件的第一条记录
x2 = cursor.fetchall()  # 获取满足条件的所有记录

cursor.execute("select * from student where name='Jack'")
x3 = cursor.fetchone()
if x3 == None:
    print("can't find Jack")

cursor.close()
db.close()

修改数据

import sqlite3

db = sqlite3.connect('test.db')
cursor = db.cursor()

sql = '''update student set gpa=?, age=? where name=?'''
cursor.execute(sql, (4.0, 22, '张三'))  # 元组三个元素分别对应三个?
db.commit()

cursor.close()
db.close()

写入二进制数据

从文件读取

import sqlite3

with open("logo.jpg", 'rb') as f:  # 二进制方式打开图片
    img = f.read()

db = sqlite3.connect('test.db')
cursor = db.cursor()

sql = '''update student set picture=? where name=" 张三 "'''
cursor.execute(sql, (img,))
db.commit()

cursor.close()
db.close()

从网络读取

import sqlite3
import requests

url_img = "https://c-ssl.dtstatic.com/uploads/blog/202205/07/20220507115721_79dc7.thumb.700_0.jpg_webp"
img_stream = requests.get(url_img, stream=True).content

db = sqlite3.connect('test.db')
cursor = db.cursor()

sql = '''update student set picture=? where name=" 张三 "'''
cursor.execute(sql, (img_stream,))
db.commit()

cursor.close()
db.close()

读取二进制数据

import sqlite3

db = sqlite3.connect('test.db')
cursor = db.cursor()

sql = 'select name,picture from student'
cursor.execute(sql)
x = cursor.fetchall()

for p in x:
    if p[1] == None:
        continue
    with open(p[0] + '.jpg', 'wb') as f:  # 照片写入文件
        f.write(p[1])

cursor.close()
db.close()

正文完
post-qrcode
 0
三毛
版权声明:本站原创文章,由 三毛 于2023-08-14发表,共计1898字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)