【案例】做一个电话簿(二)

0. 前言

今天我们来继续设计我们的电话簿,今天的内容是设计一个数据库表格,并且编写相关代码。

1. 设计表格

对于一个电话簿,它有哪些要素呢?这里我们仅仅简单考虑。

我列出了以下这些关键信息,旨在建立一个最初级的演示模型。

  1. ID
  2. 姓名
  3. 号码
  4. 电子邮件
  5. 备注

上面这 5 点中,第 1 点 ID 是主键,是唯一表示每个人的关键,因为如果仅用人名来区别每一个人,可能会存在重名的情况;如果用号码来区别每一个人,可能会存在每个人有众多电话号码的情况,也无法区别。

2. 创建数据库以及表格

我们使用了 Python3 内置的数据库——SQLite,所以并不需要安装,并且数据库仅仅是一个以 db 结尾的文件而已,超级轻量级,对于数据库的查看,需要下载一个软件——SQLiteExpertPers64。

def create_database():
    """
    创建数据 ProjectDataBase.db
    """
    conn = sqlite3.connect(DBPath) # DBPath:数据库文件创建的路径
    conn.close()
    print('** 创建数据库 %s 成功! **' % DBName)
    create_tables() # 前往创建表

该代码就是创建数据库的代码,是不是很简单?最后就会生成下面这个样子的一个文件。

在这里插入图片描述

关于表格的创建,我们这个小项目只需要创建一个表即可,表项的内容如第一部分所述,创建页表的代码如下所示:

def create_tables():
    """
    创建数据库表
    """
    conn = sqlite3.connect(DBPath)
    c = conn.cursor()
    
    # 执行 DDL 语句创建 class_table
    c.execute("""
        create table phoneNumber_table(
        ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, # 自增 ID
        Name varchar(20), # 姓名
        Number char(11), # 号码
        Email char(30), # 邮箱
        Note text) # 备注
        """)
    # 关闭游标
    c.close()
    # 关闭连接
    conn.close()

上面的代码可以看作是使用 sqlite 操作数据库的模板,使用 sqlite 操作数据库需要先建立链接、创建游标、执行 SQL 语句等步骤。创建数据库以及创建表,乃至后面向数据库中插入数据都是在执行 SQL 语句这个步骤中写的。

ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, # SQLite 中设置自增字段写法

3. 代码汇总

# 电话簿
import os
import sqlite3

# 本脚本名称
scriptPath = __file__
# scriptName = os.path.basename(__file__)
# 数据库创建路径
DBName = "\phoneNumberDB.db"
DBPath = os.path.split(os.path.realpath(__file__))[0] + DBName


def create_database():
    """
    创建数据 ProjectDataBase.db
    """
    conn = sqlite3.connect(DBPath)
    conn.close()
    print('** 创建数据库 %s 成功! **' % DBName)
    create_tables()

def create_tables():
    """
    创建数据库表
    """
    conn = sqlite3.connect(DBPath)
    c = conn.cursor()
    
    # 执行 DDL 语句创建 class_table
    c.execute("""
        create table phoneNumber_table(
        ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
        Name varchar(20),
        Number char(11),
        Email char(30),
        Note text)
        """)
    # 关闭游标
    c.close()
    # 关闭连接
    conn.close()

def Insert_data(dataTuple=()):
    """
    插入数据
    """
    conn = sqlite3.connect(DBPath)
    c = conn.cursor()
    # c.execute('PRAGMA foreign_keys = ON;')
    c.execute(
        'insert into phoneNumber_table values(?, ?, ? ,? ,?)',
        dataTuple
    )
    conn.commit()
    c.close()
    conn.close()
    print('插入数据:', dataTuple, '成功!')

if __name__ == "__main__":
    # create_database()
    Insert_data(dataTuple=(None, 'jack', '1234567890', 'abc@163.com', ''))

4. 运行结果

在这里插入图片描述

我们的表创建成功了,并且也能够成功插入数据。

5. 下周计划

  • 制作 GUI

6. 不足之处

  • 如果一个人有多个号码怎么办?可以再新建一个表,用表连接的方式来实现。

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字50 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值