博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python中SQL的使用
阅读量:5729 次
发布时间:2019-06-18

本文共 3223 字,大约阅读时间需要 10 分钟。

# 常用的关系型数据库有 mysql postgresql sqlite 等(具体区别上课再说)## 传统数据库以表的形式存储数据# 一张表可以有很多个字段# 以用户表为例, 存储 4 个数据的表结构如下# 用户 id# 用户名# 密码# 邮箱## 范例数据如下# 1     gua     123     gua@qq.com# 2     gua1    23      gua1@q.com# 数据库通过 SQL 来操作数据# SQL (结构化查询语言)# 操作数据库的接口 也就是操作数据库的方法# 增加数据# 删除数据# 修改数据# 查询数据# CRUD# create retrieve update delete## 数据库的更多的概念,上课会解释(文字太苍白)# 请下载 sqlitebrowser 软件(这是一个管理 sqlite 数据库的免费软件,自行搜索或者等群内链接)# SQL 语句如下(仅为范例,上课会讲具体的语法)"""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';""""""几种关系型数据库的用法和 sql 语法都极度相似开发中一般会用 sqlite 数据库部署到服务器上的时候才会使用 mysql 等数据库下面是 python 操作 sqlite 数据库的范例代码注意,代码上课会讲,你不用看懂,也不用运行"""import sqlite3def create(conn):    # 注意 CREATE TABLE 这种语句不分大小写    sql_create = '''    CREATE TABLE `users` (        `id`    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,        `username`    TEXT NOT NULL UNIQUE,        `password`    TEXT NOT NULL,        `email`    TEXT    )    '''    # 用 execute 执行一条 sql 语句    conn.execute(sql_create)    print('创建成功')def insert(conn, username, password, email):    sql_insert = '''    INSERT INTO        users(username,password,email)    VALUES        (?, ?, ?);    '''    # 下面的写法用 string.format 拼 sql, 是一个严重的安全漏洞    # 会被 SQL 注入    # sql = '''    # INSERT INTO    #     users(username,password,email)    # VALUES    #     ("{}", "{}", "{}")    # '''.format('123', '345', 'a.com')    # conn.execute(sql)    # 参数拼接要用 ?,execute 中的参数传递必须是一个 tuple 类型    conn.execute(sql_insert, (username, password, email))    print('插入数据成功')def select(conn):    # 一个注入的用户名    usr = 'gua" or "1"="1'    pwd = 'gua'    sql = '''    SELECT        id, username, email    FROM        users    WHERE        username=? and pwe=?        #WHERE    #    username="{}" and password="{}"    #'''.format(usr, pwd)    # 这是读取数据的套路    cursor = conn.execute(sql)    print('所有数据', list(cursor))    # for row in cursor:    #     print(row)def delete(conn, user_id):    sql_delete = '''    DELETE FROM        users    WHERE        id=?    '''    # 注意, execute 的第二个参数是一个 tuple    # tuple 只有一个元素的时候必须是这样的写法    conn.execute(sql_delete, (user_id,))def update(conn, user_id, email):    """    UPDATE        `users`    SET        `email`='gua', `username`='瓜'    WHERE        `id`=6    """    sql_update = '''    UPDATE        `users`    SET        `email`=?    WHERE        `id`=?    '''    conn.execute(sql_update, (email, user_id))def main():    # 指定数据库名字并打开    db_path = 'web8.sqlite'    conn = sqlite3.connect(db_path)    print("打开了数据库")    # 打开数据库后 就可以用 create 函数创建表    # create(conn)    # 然后可以用 insert 函数插入数据    # insert(conn, 'sql4', '1234', 'a@b.c')    # 可以用 delete 函数删除数据    # delete(conn, 1)    # 可以用 update 函数更新数据    # update(conn, 1, 'gua@cocode.cc')    # select 函数查询数据    # select(conn)    #    # 必须用 commit 函数提交你的修改    # 否则你的修改不会被写入数据库    conn.commit()    # 用完数据库要关闭    conn.close()if __name__ == '__main__':    main()'''CREATE TABLE `users` (    `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,    `username` TEXT NOT NULL UNIQUE,    `password` TEXT NOT NULL,    `email` TEXT)'''

 

转载于:https://www.cnblogs.com/cuzz/p/8245579.html

你可能感兴趣的文章
使用shell脚本生成数据库markdown文档
查看>>
centos和pycharm中取绝对路径的差别
查看>>
第13章_字符串:
查看>>
ext2磁盘布局
查看>>
MySql数据库2【常用命令行】
查看>>
安装、进程-云计算学习笔记---hadoop的简介,以及安装,用命令实现对hdfs系统进行文件的上传下载-by小雨...
查看>>
动态规划---->货郎担问题
查看>>
添加虚拟子网
查看>>
Ubuntu 12.04 root用户登录设置
查看>>
存储过程点滴
查看>>
Maven编译跳过test的设置
查看>>
SQLyog图形化l数据库的操作和学习
查看>>
raspbian 怎么才能有声音?
查看>>
[LeetCode]22.Generate Parentheses
查看>>
《数据结构》—— 线性表(上)
查看>>
WEB前端 CSS选择器
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
计算A/B Test需要的样本量
查看>>
有力证据
查看>>
二叉树前序中序后序遍历的非递归方法
查看>>