您的位置:首页 > 数据库

web6课堂回顾

2016-06-16 00:00 363 查看
摘要: 萧大的web6课程回顾,主要讲了sql语言及其管理工具

1.sql是什么?什么是sqlite?

SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言(结构化查询语言)。 在使用它时,只需要发出“做什么”的命令,“怎么做”不用使用者考虑的。 包括了‘增删查改’一些命令

sqlite是数据库引擎,也是数据库管理系统,集成在用户程序中。比方Python有sqlite3,我们使用的时候用指令:import sqlite3

两者是不一样的。前者是语言,后者是轻型数据库

2.数据库管理软件及其使用

我们用的是SQLite browser,数据库管理软件就是用可视化图形化的界面来实现语言编写。可以想象一下windows系统和dos系统,前者是可视化,后者是使用语言命令。这就是区别.

先要理解一个概念就是,一个数据库是一个文件,而每个文件中可以有多个表(看个人自己意愿),一个表示包含了多个字段,最终每个字段就表示了一个信息。



最最重要的一点就是,当点击完ok以后返回到主界面,如图,一定要write changes,相当于编辑完文档一定要保存一样


浏览表干嘛呢?就是添加value的,如下图,需要注意的是,还是write changes一定要点击



3.Python中语言命令创建

先看看萧大给的语言吧

# 数据库以表的形式存储数据
# 一个表 有很多个字段

# 以用户表为例
# 用户 id
# 用户名
# 密码
# 邮箱
#
# 1 gua 123 gua@qq.com
# 2 gua1 23 gua1@q.com

# SQL 结构化查询语言
# 操作数据库的接口 也就是操作数据库的方法
# 增加数据
# 删除数据
# 修改数据
# 查询数据
# CRUD
# create  retrieve update delete

"""
INSERT INTO
`users`(`id`,`username`,`password`,`email`)
VALUES \
(2,'','',NULL);

UPDATE `users` SET `username`=? WHERE `_rowid_`='2';
UPDATE `users` SET `password`=? WHERE `_rowid_`='2';
UPDATE `users` SET `email`=? WHERE `_rowid_`='2';
"""

import sqlite3

# 以下是创建表,这里需要注意的是,create只需要执行一次就可以了
# 第一次没有数据库的时候创建,有了之后就把这个create注释掉
# 一般我们把SQL的关键字用大写,自己的数据用小写,这样方便以后的维护
# 可以注意到广泛的用到了``字符,这个字符是在!左边
def create(conn):
sql_create = '''
CREATE TABLE `users` (
`id`	INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`username`	TEXT NOT NULL UNIQUE,
`password`	TEXT NOT NULL,
`email`	TEXT
)
'''
conn.execute(sql_create)
# 上句是执行的意思,这里的conn是指connect,在main已经定义好了
print('创建成功')

# 以下是增加value的意思,以下用到?是为了防止SQL注入:本来要填写的是规范的数据,但是
# 用户或者输入了乱七八糟不被识别的数据,这个?就是为了防止这种情况
def insert(conn, username, password, email):
sql_insert = '''
INSERT INTO
`users`(`username`,`password`,`email`)
VALUES
(?, ?, ?);
'''
conn.execute(sql_insert, (username, password, email))
print('插入数据成功')

def select(conn, username):
sql = '''
SELECT
*
FROM
users
WHERE
# 这个where以后的句子可以省略,这样的话最终返回的all是[(),()]这样的列表,包含了所有用户信息
username=?
'''
# select * from users where username=?
# 如上句把所有语句写在了同一行,是简便,但是不易读不易修改
cursor = conn.execute(sql, (username,))
all = cursor.fetchall()
# 以上是获取所有数据,cursor只是一个变量,username用的是元组所以有逗号来区分
print(all)
return all

def delete(conn, user_id):
sql_delete = '''
DELETE FROM
users
WHERE
id=?
'''
conn.execute(sql_delete, (user_id,))

# 以下修改数据的时候用口号隔开,当然也得用?来防止注入
# 注意了,这个函数里面user_id仅仅是个参数,而`id`这里是在数据库的表里面
# 新建的时候用的名字起的就是id,两个不一样。语句的含义是在where的id出更新pw和em数据
def update(conn, user_id, password, email):
sql_update = '''
UPDATE
`users`
SET
`password`=?,
`email`=?
WHERE
`id`=?
'''
# UPDATE `users` SET `password` =?,`email` =? WHERE `id` =?
conn.execute(sql_update, (password, email, user_id))

def messages_by_owner_id(conn, owner_id):
sql = '''
SELECT
*
FROM
messages
WHERE
`owner_id`=?
'''
cursor = conn.execute(sql, (owner_id,))
all = cursor.fetchall()
return all

def main():
db_path = r'class6.sqlite'
conn = sqlite3.connect(db_path)
# create()
print("Opened database successfully")
# insert(conn, 'sql', '123', '')
# delete(conn, 2)
update(conn, 3, 'ai_ya', 'gua@cocode.cc')
# select(conn, 'gua')
# msgs = messages_by_owner_id(conn, 2)
# print(msgs)
conn.commit()
conn.close()
# 以上必须有commit()就相当于write changes才能保证数据已经保存

if __name__ == '__main__':
main()
# print(type((1)))
# print(type((1,)))

很多东西已注释过了,我们可以在sql管理器里面查看修改,就是这么粗暴简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 sqlite SQL