# 常用的关系型数据库有 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 sqlite3 def 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
)
'''

python中SQL的使用的更多相关文章

  1. PYTHON 中 SQL 带参数

    使用 PYTHON 的字符串填充方式 import mysql.connector sql = 'select \* from school.student where age > {age} ...

  2. 【python】sql语句插入中内容同时包含单引号和双引号的解决办法

    在python中调用MySQLdb模块插入数据信息,假设待输入信息data为: Hello'World"! 其中同时包含了单引号和双引号 一般插入语句为 sql = "insert ...

  3. Python中防止sql注入的方法详解

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.下面这篇文章主要给大家介绍了关于Python中 ...

  4. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  5. python操作SQL

    pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同 一.下载安装 pip3 install pymysql 二.操作使用 1.执行SQL #!/usr ...

  6. Python中实现异步并发查询数据库

    这周又填了一个以前挖下的坑. 这个博客系统使用Psycopy库实现与PostgreSQL数据库的通信.前期,只是泛泛地了解了一下SQL语言,然后就胡乱拼凑出这么一个简易博客系统. 10月份找到工作以后 ...

  7. python 连接sql server

    linux 下pymssql模块的安装 所需压缩包:pymssql-2.1.0.tar.bz2freetds-patched.tar.gz 安装: tar -xvf pymssql-2.1.0.tar ...

  8. python中的metaclass

    首先看下面的代码: # coding: utf-8 class Test(object): pass print Test.__class__ # type print Test.__base__ # ...

  9. Python中通过cx_Oracle访问数据库遇到的问题总结

    以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题:     1)安装cx_Oracle会遇到的问题:在Windo ...

随机推荐

  1. Maven设置snapshot无法在远程仓库下载的问题解决

    检查步骤如下: 1.检查nexus是否纳入public版本中: 2.配置中是否启用snapshots功能.以下方法两种设置都可以,任选一个即可. 一种是在项目pom.xml使用: <reposi ...

  2. 求同余方程x^A=B(mod m)的解个数(原根与指标)

    求方程:的解个数 分析:设,那么上述方程解的个数就与同余方程组:的解等价. 设同于方程的解分别是:,那么原方程的解的个数就是 所以现在的关键问题是求方程:的解个数. 这个方程我们需要分3类讨论: 第一 ...

  3. 转载:win10 下安装32位的Oracle 11g 客户端(问题:环境不满足最低要求)

    1. 在安装文件夹中,找 stage->cvu->cvu_prereq.xml文件. 2. 用记事本打开其xml文件进行编辑,加下面一段保存. <OPERATING_SYSTEM R ...

  4. html语义化小记录

    1.头部标签 <header></header> 2.大块集合 <article></article> 3.主要集和 <main></ ...

  5. Widows 注册表 HKEY_CLASSES_ROOT

    Widows 注册表 HKEY_CLASSES_ROOT在此关键字之下,可以看到有一个CLSID关键字.在CLSID关键字之下列有系统中安装的所有组件的CLSID.注册表CLSID是一个具有如下格式的 ...

  6. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.9. 配置用户等效性(可选项)

    2.9.配置用户等效性(可选项) Oracle 11g r2 ssh也可以在安装过程中配置. 2.9.1. grid用户等效性 1.以下均以grid用户执行: 在两个节点的grid主目录分别创建.ss ...

  7. coffeescript 1.6.3使用帮助

    CoffeeScript is a little language that compiles into JavaScript. Underneath that awkward Java-esque ...

  8. 好未来AI Lab 思考下面的问题

    好未来AI Lab和科赛联合举办的TAIL CAMP——AI实战训练营 图像识别: 卷积层是所有CNN网络中必不可少的模块,请解释为什么3X3的卷积是最为常用的卷积核大小?小尺寸卷积核(1x1)和大尺 ...

  9. Sql中存在斜杠“/”怎么办?

    比如下面的语句 select concat(name,'/',description) from table1 这样的语句在数据库访问工具中执行没问题,到java中就报错. 解决办法也很简单,用单引号 ...

  10. Centos 7 进入单用户模式图文详解

    由于昨晚做了一个很傻X的事情,所以有幸进入了CentOS 7 的单用户模式. CentOS 7 在进入单用户的时候和6.x做了很多的改变, 下面让我们来看看如何进入单用户模式. 如何进入CentOS ...