web6课堂回顾
2016-06-16 00:00
363 查看
摘要: 萧大的web6课程回顾,主要讲了sql语言及其管理工具
sqlite是数据库引擎,也是数据库管理系统,集成在用户程序中。比方Python有sqlite3,我们使用的时候用指令:import sqlite3
两者是不一样的。前者是语言,后者是轻型数据库
先要理解一个概念就是,一个数据库是一个文件,而每个文件中可以有多个表(看个人自己意愿),一个表示包含了多个字段,最终每个字段就表示了一个信息。
最最重要的一点就是,当点击完ok以后返回到主界面,如图,一定要write changes,相当于编辑完文档一定要保存一样
浏览表干嘛呢?就是添加value的,如下图,需要注意的是,还是write changes一定要点击
很多东西已注释过了,我们可以在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管理器里面查看修改,就是这么粗暴简单。