017-Python语言开发PythonComputation(六)

 

 

 

Database 数据库

 

 

1.创建数据库
2.连接数据库
3.创建表 (CREATE TABLE
4.插入记录 (INSERT INFO
5.获取记录,获取排序记录 (SELECT
6.从连接的表中获取记录
7.更新记录
8.删除记录

 

 

 

1.一个数据库一般包括多个表

2.每个表都有一个表名

3.每张表都有列和行,列就是fields参数属性,行就是record记录

 

 

 

我们来看一个数据库的例子

在这个例子中

一共有8列,也就是8个field

一共有3条记录

每条记录都有对应的P-ID,LastName这些数据

 

 

 

1.每条记录在表里都是唯一的

2.primary key是用来保证记录的独特性

-1.一个primary key是在一个表中包含了一个唯一值

-2.每个表只有一个primary key

3.candidate key, 其他表中的数据,如果也是唯一的,那么就是candidate key

-1.primary key是来自candidate key

-2.其他的candidate keys叫做alternative keys

4.keys可以是简单的也可以是复合的

 

 

 

 

 

 

决定primary key

1.最小化,,,,要用最少的列

2.稳定性,,,,这个key几乎不会改变

3.简易性,熟悉性,,,,这个key要简单也要让人熟悉

 

 

 

 

 

 

两张表的关系

 

看这个图

第一个表是 顾客表

顾客有这些信息

1.FirstName

2.LastName

3.Address

4.City

5.Phone

等等信息

 

第二张表是 发票表

发票有这些信息

1.InvoiceNumber

2.TotalSale

3.TotalRemitted

4.FormOfPayment

 

 

 

 

 

 

foreign key外键

例如这个例子,

P-ID在另外一个表中是primary key,

那么在这个表中就是外键,

这张表的primary key 是OrderID

 

 

 

 

 

表的多对多关系  Many-Many M-M

在这个例子中

一个学生可以注册多个课

每个课里面有多个学生

那么这就是一个多对多的关系

 

 

 

 

 

 

 

数据库标准化

 

 

 

 

 

 

 

SQL 结构化查询语句

1.创建数据库,创建表

2.获取,插入,更新,删除数据

3.执行查询

4.设置权限

 

 

 

 

 

 

DML和DDL

DML 数据操作语言

DDL 数据定义语言

 

 

 

 

 

 

SQLite

SQLite
1.是嵌入式的关系型数据库引擎,实现SQL-92标准
    -1.独立,无需数据库服务
    -2.无需配置
    -3.事务型
2.小型,只有一个硬盘文件
3.跨平台
4.与应用连接
5.很多语言内置SQLite

 

 

 

 

创建数据库

现在我们要创建一个数据库,里面有2个表

 

那么我们的SQL语句是这样的

也就是DDL

CREATE TABLE books(
    id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
    title TEXT NOT NULL,
    year INTEGER NOT NULL,
    author_id INTEGER NOT NULL,
    FOREIGN KEY (author_id) REFERENCES authors
)

 

 

 

CREATE TABLE authors(
    id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
    name TEXT UNIQUE NOT NULL
)

 

 

这样就创建了2个表

一个books,一个authors

 

 

 

 

 

那么在python中,我们就要用sqlite3模块去操作数据库了

 

我们来看下代码

import sqlite3

db = sqlite3.connect('dbs/library.db')
cursor = db.cursor()
cursor.execute(
    'CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, title TEXT NOT NULL, year INTEGER NOT NULL,author_id INTEGER NOT NULL, FOREIGN KEY (author_id) REFERENCES authors)')
cursor.execute(
    'CREATE  TABLE  authors (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,name TEXT UNIQUE NOT NULL)')
db.commit()
cursor.close()

1.连接

2.获取cursor指针

3.使用cursor执行sql语句

4.提交db,关闭cursor

 

 

 

当我们再次执行这段代码的时候,我们发现

发生了错误

books表已经存在了,所以一个表是不能被重复创建的

所以我们需要修改一下代码

当数据库不存在的时候我们才创建

如果数据库已经存在了,那么就不再创建

 

 

import sqlite3, os


def connect(filename):
    needcreate = not os.path.exists(filename)
    db = sqlite3.connect(filename)
    if needcreate:
        cursor = db.cursor()
        cursor.execute(
            'CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, title TEXT NOT NULL, year INTEGER NOT NULL,author_id INTEGER NOT NULL, FOREIGN KEY (author_id) REFERENCES authors)')
        cursor.execute(
            'CREATE  TABLE  authors (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,name TEXT UNIQUE NOT NULL)')
        db.commit()
        cursor.close()
    return db


connect('dbs/library.db')

 

 

 

 

 

 

插入数据

import sqlite3, os


def connect(filename):
    needcreate = not os.path.exists(filename)
    db = sqlite3.connect(filename)
    if needcreate:
        cursor = db.cursor()
        cursor.execute(
            'CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, title TEXT NOT NULL, year INTEGER NOT NULL,author_id INTEGER NOT NULL, FOREIGN KEY (author_id) REFERENCES authors)')
        cursor.execute(
            'CREATE TABLE authors (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,name TEXT UNIQUE NOT NULL)')
        db.commit()
        cursor.close()
    return db


db = connect('dbs/library.db')
cursor = db.cursor()
cursor.execute("INSERT INTO authors (name) VALUES ('Charles Dickens')")
db.commit()
cursor.close()

让cursor执行

cursor.execute("INSERT INTO authors (name) VALUES ('Charles Dickens')")

 

 

 

 

查询数据

import sqlite3, os


def connect(filename):
    needcreate = not os.path.exists(filename)
    db = sqlite3.connect(filename)
    if needcreate:
        cursor = db.cursor()
        cursor.execute(
            'CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, title TEXT NOT NULL, year INTEGER NOT NULL,author_id INTEGER NOT NULL, FOREIGN KEY (author_id) REFERENCES authors)')
        cursor.execute(
            'CREATE TABLE authors (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,name TEXT UNIQUE NOT NULL)')
        db.commit()
        cursor.close()
    return db


db = connect('dbs/library.db')
cursor = db.cursor()
cursor.execute('SELECT * FROM authors')
fetchall = cursor.fetchall()
print(fetchall)
db.commit()
cursor.close()

 

 

 

 

封装add_author

import sqlite3, os


def connect(filename):
    needcreate = not os.path.exists(filename)
    db = sqlite3.connect(filename)
    if needcreate:
        cursor = db.cursor()
        cursor.execute(
            'CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, title TEXT NOT NULL, year INTEGER NOT NULL,author_id INTEGER NOT NULL, FOREIGN KEY (author_id) REFERENCES authors)')
        cursor.execute(
            'CREATE TABLE authors (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,name TEXT UNIQUE NOT NULL)')
        db.commit()
        cursor.close()
    return db


def add_author(name):
    try:
        cursor = db.cursor()
        cursor.execute("INSERT INTO authors (name) VALUES ('" + name + "')")
        db.commit()
        cursor.close()
    except sqlite3.IntegrityError:
        print('The author exists already.')


db = connect('dbs/library.db')

while True:
    cursor = db.cursor()
    name = input()
    add_author(name)
    cursor.execute('SELECT * FROM authors')
    fetchall = cursor.fetchall()
    print(fetchall)
    db.commit()
    cursor.close()

 

 

 

 

 

封装查询语句

import sqlite3, os


def connect(filename):
    needcreate = not os.path.exists(filename)
    db = sqlite3.connect(filename)
    if needcreate:
        cursor = db.cursor()
        cursor.execute(
            'CREATE TABLE books (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, title TEXT NOT NULL, year INTEGER NOT NULL,author_id INTEGER NOT NULL, FOREIGN KEY (author_id) REFERENCES authors)')
        cursor.execute(
            'CREATE TABLE authors (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,name TEXT UNIQUE NOT NULL)')
        db.commit()
        cursor.close()
    return db


def add_author(name):
    try:
        cursor = db.cursor()
        cursor.execute("INSERT INTO authors (name) VALUES ('" + name + "')")
        db.commit()
        cursor.close()
    except sqlite3.IntegrityError:
        print('The author exists already.')


def browse_authors(db, byOrder=False):
    cursor = db.cursor()
    sql_st = "SELECT * FROM authors" if not byOrder else "SELECT * FROM authors ORDER BY name ASC"
    cursor.execute(sql_st)
    db.commit()
    records = cursor.fetchall()
    print("{:>4} | {:>16}".format('id', 'Author'))
    print("{0:->4} | {0:->16}".format(''))
    for item in records: print("{:>4} | {:>16}".format(item[0], item[1]))
    cursor.close()


db = connect('dbs/library.db')

while True:
    cursor = db.cursor()
    name = input()
    add_author(name)
    browse_authors(db)
    cursor.close()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值