python---基础知识回顾(八)数据库基础操作(sqlite和mysql)

一:sqlite操作

SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

操作步骤:

1.创建连接(记得导入模块)

import sqlite3
conn = sqlite3.connect("test.db")  #若是文件不存在会自动创建,路径可以是相对,也可以是绝对。这个文件就是相当于一个数据库

2.根据连接获取游标

curs = conn.cursor()

3.根据游标进行操作数据表

curs.execute("""create table info(
                    uid INTEGER PRIMARY KEY AUTOINCREMENT ,  #注意设置主键,必须是 INTEGER类型
                    username varchar(20),
                    password varchar(32)
                )
            """)

curs.execute("""
                CREATE INDEX  un on info (username)  #创建索引
""")相关基础

4.进行数据的增删改查

增curs.execute("""
              INSERT INTO info(username,password) VALUES ("ld","123456");
""")

删
curs.execute("""
              DELETE FROM info WHERE uid > 3;
""")

改
curs.execute("""
            UPDATE info SET username = "dsad" WHERE uid = 2;
""")
查找
info_all = curs.execute("""
              SELECT * from info;
""")

for row in curs.fetchall():
    print(row[0],row[1],row[2])

5.如果我们对数据库进行了增删改修改,原来数据(或者数据表)了,我们需要去提交我们的操作

conn.commit()

6.操作完成,断开游标和数据库连接

curs.close()
conn.close()

二:mysql操作

mysql操作需要我们导入pymysql模块(非内置)。

pip3 install pymysql

(1)其操作步骤和上面sqlite几乎一致

import pymysql

conn = pymysql.connect(host="localhost",user="root",password="root",database="t1")  #可以设置charset编码

cur = conn.cursor()  #设置游标,默认是执行查询后返回元组信息
#cur = conn.cursor(cursor=pymysql.cursors.DictCursor)  #设置游标返回字典类型信息
#执行SQL语句
sql = "select * from users"
cur.execute(sql)  #执行SQL语句,返回查询成功后的记录条数

ret = cur.fetchall()  #返回元组信息
print(ret)
#((1, ‘xiaoyu‘, ‘xiaoudaf‘, ‘123‘), (2, ‘xiaoyu‘, ‘xiaoudafc‘, ‘123‘),)
cur.close()
conn.close()

(2)SQL注入

对于用户输入的信息,我们不要直接进行拼接,需要进行过滤处理,或者使用模块方法直接帮我们解决这个问题

# 原来是我们对sql进行字符串拼接
# sql="select * from userinfo where name=‘%s‘ and password=‘%s‘" %(user,pwd)
# print(sql)
# res=cursor.execute(sql)

#改写为(execute帮我们做字符串拼接,我们无需且一定不能再为%s加引号了)
sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引号,因为pymysql会自动为我们加上
res=cursor.execute(sql,[user,pwd]) #pymysql模块自动帮我们解决sql注入的问题,只要我们按照pymysql的规矩来。

(3)增删改需要commit

一次增加一条sql = ‘insert into users(name,fullname,password) VALUES ("dsada","dasdasf","dsad")‘
cur.execute(sql)

sql = ‘insert into users(name,fullname,password) VALUES (%s,%s,%s)‘
cur.execute(sql,("aaaaa","asd666","6666"))#获取插入的最后一条数据的自增ID
print(cur.lastrowid)  #只对一次增加一个可以直接看出,对于一次增加多个需要进行数量添加
一次执行多条
sql = ‘insert into users(name,fullname,password) VALUES (%s,%s,%s)‘
cur.executemany(sql,[("aaadsaaa","asd6dasd66","6666"),("adsaaaaa","asd6awf66","6666"),("awaaaaa","asd666","6666")])

注意execute和executemany执行后会返回执行影响的条数

(4)查询

sql = "select * from users"
rows = cur.execute(sql) #返回影响的函数rows,结果放在一个集合中,等待查询

ret = cur.fetchone()  #获取一条数据
print(ret)  #(1, ‘xiaoyu‘, ‘xiaoudaf‘, ‘123‘)

ret = cur.fetchmany(2)  #获取指定数量的数据,从当前位置
print(ret)  #((2, ‘xiaoyu‘, ‘xiaoudafc‘, ‘123‘), (3, ‘daf‘, ‘fafwafs‘, ‘fwa‘))

ret = cur.fetchall()    #获取当前位置下的所有数据
print(ret)

#移动游标位置
cur.scroll(0,mode="absolute")
ret = cur.fetchall()    #获取了所有的数据
print(ret)

cur.scroll(-5,mode="relative")  #游标处于最后,现在相对最后向前移动5条
ret = cur.fetchall()    #获取了后5条数据
print(ret)

原文地址:https://www.cnblogs.com/ssyfj/p/8970780.html

时间: 2024-11-02 21:14:41

python---基础知识回顾(八)数据库基础操作(sqlite和mysql)的相关文章

python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding:utf-8from com.wenhy.crawler_baidu_baike import url_manager, html_downloader, html_parser, html_outputer print "爬虫百度百科调度入口" # 创建爬虫类class SpiderMai

C++ 基础知识回顾(string基础、智能指针、迭代器、容器类)

[1] string基础 [1.1] string 的构造 1 #include <iostream> 2 #include <string> 3 4 int main() 5 { 6 using namespace std; 7 8 cout << "1 --- string(const char* s):将string对象初始化为s指向的C风格字符串" << endl; 9 string one("benxintuzi_1&

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之javaIO类--内存操作流ByteArrayInputStream和ByteArrayOutputSteam(操作字节数组)

直接看代码: package cn.itcast.io.p6.bytestream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class ByteArrayStreamDemo { /** * @param args * @throws IOException * 特点 * 1.内存操作流 * 2.不操作底层资源,不调

SQL基础知识回顾整理

20150929~20151016所学SQL基础知识回顾整理,后续完善补充 服务器名称:是指你要连接的安装的数据库服务器所在的那台电脑的ip地址,如果是本机的话,就是  . mdf 结尾:数据库数据文件,一个数据库有且只有一个 ldf:数据库日志文件,一个数据库有且至少有一个 数据库中存放数据的结构,是通过表的形式来存储的,一个数据库中有很多个表 基础知识(创建.使用数据库及创建表.添加数据.删除表) 约束 查询 子查询 表连接 视图 各类函数 存储过程 触发器 分页语句 事务 20150929

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc

【转载:Oracle基础知识】Oracle数据库体系结构

先来看张直观的图:                                            oracle 11g 体系结构图 理解Oracle体系结构要充分理解三个概念:数据库(database),数据库实例(instance),会话(session),一定不要把这三个概念弄混. 数据库的概念 (A)    物理存储结构由数据文件.控制文件.重做日志文件组成: 1.       数据文件(datafile) select * from dba_data_files; 数据文件包括存

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程