我是靠谱客的博主 典雅烤鸡,最近开发中收集的这篇文章主要介绍Python SQLite入门简介安装初试联表查询简单封装数据类型遇到的坑参考文献,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 简介
  • 安装
  • 初试
  • 联表查询
  • 简单封装
  • 数据类型
  • 遇到的坑
  • 参考文献

简介

SQLite 是一款 C 语言实现的小型、快速、自包含、高可用、功能齐全的SQL数据库引擎。

SQLite 是一个基于文件的关系型数据库,只有一个文件,却能储存最多 140TB 的数据。

SQLite 是世界上使用最广泛的数据库。

SQLite 内置于大多数手机和计算机中,并捆绑在人们每天使用的无数应用程序中。

SQLite 的文件格式是稳定的、跨平台的、向后兼容的,开发者承诺将其保持到2050年。

SQLite 数据库文件通常被用作容器,在系统之间传输丰富的内容,并作为数据的长期存储格式。目前有超过1万亿的 SQLite 数据库正在使用中。

SQLite 的源代码属于公共,每个人可以出于任何用途免费使用。

不适合使用 SQLite 的情况:

  1. 程序和数据分离,且它们通过互联网连接
  2. 高并发写入
  3. 数据量非常大




安装

Linux / MacOS 自带 SQLite




初试

商品表 Product
在这里插入图片描述
代码

import os
import sqlite3

if os.path.exists('database.db'):
    os.remove('database.db')  # 存在则删掉,避免重复添加

# 创建数据库和表
conn = sqlite3.connect('database.db')
c = conn.cursor()
sql = '''
CREATE TABLE IF NOT EXISTS `product`
(
    `product_id`     CHAR(4) PRIMARY KEY NOT NULL,
    `product_name`   VARCHAR(100) NOT NULL,
    `product_type`   VARCHAR(32) NOT NULL,
    `sale_price`     INTEGER,
    `purchase_price` INTEGER,
    `regist_date`    DATE
);
'''
c.execute(sql)

# 增
sql = 'INSERT INTO `product` (`product_id`, `product_name`, `product_type`, `sale_price`, `purchase_price`, `regist_date`) VALUES (?, ?, ?, ?, ?, ?)'
datas = [
    ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20'),
    ('0002', '打孔器', '办公用品', 500, 320, '2009-9-11'),
    ('0003', '运动T恤', '衣服', 4000, 2800, None),
    ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-9-20'),
    ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-1-15'),
    ('0006', '叉子', '厨房用具', 500, None, '2009-9-20'),
    ('0007', '擦菜板', '厨房用具', 880, 790, '2008-4-28'),
    ('0008', '圆珠笔', '办公用品', 100, None, '2009-11-11')
]
affected_rows = c.executemany(sql, datas).rowcount
print('插入{}条数据'.format(affected_rows))

# 删
sql = 'DELETE FROM `product` WHERE `product_id`=?'
affected_rows = c.execute(sql, ('0001',)).rowcount
print('删除{}条数据'.format(affected_rows))

# 改
sql = 'UPDATE `product` SET `regist_date`=? WHERE `product_id`=?'
affected_rows = c.execute(sql, ('2009-10-10', '0003')).rowcount
print('修改{}条数据'.format(affected_rows))

# 查
sql = 'SELECT * FROM `product`'
all_rows = c.execute(sql).fetchall()
for row in all_rows:
    print(row)

conn.close()




联表查询

商品表 Product
在这里插入图片描述
商店商品表 ShopProduct
在这里插入图片描述

import os
import sqlite3

if os.path.exists('database.db'):
    os.remove('database.db')  # 存在则删掉,避免重复添加

# 创建数据库和表
conn = sqlite3.connect('database.db')
c = conn.cursor()
sql = '''
CREATE TABLE IF NOT EXISTS `product`
(
    `product_id`     CHAR(4) PRIMARY KEY NOT NULL,
    `product_name`   VARCHAR(100) NOT NULL,
    `product_type`   VARCHAR(32) NOT NULL,
    `sale_price`     INTEGER,
    `purchase_price` INTEGER,
    `regist_date`    DATE
);
'''
c.execute(sql)
sql = '''
CREATE TABLE IF NOT EXISTS `shopproduct`
(
    shop_id          CHAR(4) NOT NULL,
    shop_name        VARCHAR(100) NOT NULL,
    product_id       CHAR(4) NOT NULL,
    quantity         INTEGER
);
'''
c.execute(sql)

# 增
sql = 'INSERT INTO `product` (`product_id`, `product_name`, `product_type`, `sale_price`, `purchase_price`, `regist_date`) VALUES (?, ?, ?, ?, ?, ?)'
datas = [
    ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20'),
    ('0002', '打孔器', '办公用品', 500, 320, '2009-9-11'),
    ('0003', '运动T恤', '衣服', 4000, 2800, None),
    ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-9-20'),
    ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-1-15'),
    ('0006', '叉子', '厨房用具', 500, None, '2009-9-20'),
    ('0007', '擦菜板', '厨房用具', 880, 790, '2008-4-28'),
    ('0008', '圆珠笔', '办公用品', 100, None, '2009-11-11')
]
c.executemany(sql, datas)
sql = 'INSERT INTO `shopproduct` (`shop_id`, `shop_name`, `product_id`, `quantity`) VALUES (?, ?, ?, ?)'
datas = [
    ('000A', '东京', '0001', 30),
    ('000A', '东京', '0002', 50),
    ('000A', '东京', '0003', 15),
    ('000B', '名古屋', '0002', 30),
    ('000B', '名古屋', '0003', 120),
    ('000B', '名古屋', '0004', 20),
    ('000B', '名古屋', '0006', 10),
    ('000B', '名古屋', '0007', 40),
    ('000C', '大阪', '0003', 20),
    ('000C', '大阪', '0004', 50),
    ('000C', '大阪', '0006', 90),
    ('000C', '大阪', '0007', 70),
    ('000D', '福冈', '0001', 100)
]
c.executemany(sql, datas)

# 联表查询
sql = '''
SELECT SP.shop_id, SP.shop_name, SP.product_id, P.product_name
FROM `shopproduct` AS SP
INNER JOIN `product` AS P
ON SP.product_id = P.product_id;
'''
all_rows = c.execute(sql).fetchall()
for row in all_rows:
    print(row)

conn.close()




简单封装

import sqlite3

conn = sqlite3.connect('database.db')
c = conn.cursor()
sql = '''
CREATE TABLE IF NOT EXISTS `tasks` 
(
   `id` INTEGER UNIQUE PRIMARY KEY AUTOINCREMENT,
   `name` TEXT,
   `countdown` INTEGER
);
'''
c.execute(sql)  # 创建数据库


def create(name='job', countdown=5):
    """增"""
    sql = 'INSERT INTO `tasks` (`name`, `countdown`) VALUES (?, ?)'
    c.execute(sql, (name, countdown))
    conn.commit()
    return c.lastrowid


def delete(id, verbose=False):
    """删"""
    sql = 'DELETE FROM `tasks` WHERE `id`=?'
    affected_rows = c.execute(sql, (id,)).rowcount
    if verbose:
        print('已删除{}行数据'.format(affected_rows))
    conn.commit()


def update(id, countdown):
    """改"""
    sql = 'UPDATE `tasks` SET `countdown`=? WHERE `id`=?'
    c.execute(sql, (countdown, id))
    conn.commit()


def read(id=None, verbose=False):
    """查"""
    sql = 'SELECT * FROM `tasks` '
    if id:
        sql = 'SELECT * FROM `tasks` WHERE `id`={}'.format(id)
    all_rows = c.execute(sql).fetchall()
    if verbose:
        print(all_rows)
    return all_rows




数据类型

Python数据类型SQLite数据类型描述
datetime.datedate日期
datetime.datetimetimestamp日期+时间
NoneNULL空值
intINTEGER整数
floatREAL浮点数
strTEXT文本字符串
AnyBLOB数据块,按输入原样存储

详细阅读:

  1. Datatypes In SQLite Version 3
  2. SQLite3的数据类型




遇到的坑

1. 报错 sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread.

调用 sqlite3.connect('database.db') 时添加参数 check_same_thread=False




参考文献

  1. SQLite – Python | 菜鸟教程
  2. sqlite3 Documentation
  3. SQLite 官网
  4. Appropriate Uses For SQLite
  5. 一日一技:这个数据库用起来刚刚好

最后

以上就是典雅烤鸡为你收集整理的Python SQLite入门简介安装初试联表查询简单封装数据类型遇到的坑参考文献的全部内容,希望文章能够帮你解决Python SQLite入门简介安装初试联表查询简单封装数据类型遇到的坑参考文献所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部