Sqlite3数据库
sqlite3模块并非只能操作sqlite3数据库,所有sql的数据库都可以进行操作,如mysql,sqlite3模块只是提供了python与sql数据库的接口。
1.创建一个连接:db
= sqlite3.connect(filename)
#此处的connect的参数是一个文件路径(*.sdb文件),并非是网络连接(IP:Port)
#db是数据库连接的一个对象,主要是对数据库整体的操作,比如:
db.commit()
----使用游标执行完sql语句后,用数据库连接对象db来进行事物提交
db.rollback()
----事物回滚
db.close()
----关闭数据库连接
db.cursor()
----创建游标
2.创建一个操作数据库的游标:cu
= db.cursor()
#创建游标是为了对数据库执行sql语句,所有sql语句的操作都是由游标来执行的
#游标可以对数据库的表执行具体的sql语言
cu.execute()
----执行一条sql语句
cu.fetchone()
----从执行完execute后的结果中,取出一条记录
cu.fetchmany(size)
----从执行完execute后的结果中,取出多条记录
cu.all()
----从执行完execute后的结果中,取出全部记录
cu.close()
----游标关闭
cu.scroll()
----游标滚动
重点讲一下
cu.fetchone(),cu.fetchmany(size),cu.fetall()三个函数:
--------------------在执行查询语句后,Python将返回一个循环器,包含有查询获得的多个记录------------------
三个的返回值都是序列,序列内的内容是cu.execute(sql)执行后得到的内容,换句话说,如果,游标在没有进行sql语句执行的时候调用以上三者,得到的都是空序列。只有执行了cu.execute(sql)后,此时的cu游标是有查询结果的,所以掉用cu.fetchone(),cu.fetchmany(size),cu.fetall()时,可以获得一个序列,序列内是sql语句获得的结果,结果数量分别为一条,size条和全部。
例子:
cu.execute("select
name,age,sex from student")
则,如果有数据,则python的数据是这样的:
[(
name1,age1,sex1),(name2,age2,sex2),.............,(nameN,ageN,sexN)]
当使用cu.fetchone(),只获得一条数据,则内容为[(name1,age1,sex1)],可看作一个集合{name1,age1,sex1}
利用python特性可得 a,b,c = cufetchone()
a=name1
b=age1
c=sex1
当使用cu.fetall()时,获得的结果是:
[(
name1,age1,sex1),(name2,age2,sex2),.............,(nameN,ageN,sexN)]
2.pymysql(python3.x后不再支持Mysqldb)
Linux下直接pip3
install pymysql即可安装
pymysql模块与sqlite3模块最大的区别是,pymysql模块提供网络连接数据库模式。
db =
pymysql.connect()
pymssql.connect()来初始化连接类,它允许如下的参数(全部为关键字参数):
dsn:连接字符串,主要用于与之前版本的pymssql兼容(基本可以忽略)
user:用户名
password:密码
trusted:布尔值,指定是否使用windows身份认证登陆
host
:主机名(可以使用形式)
database:数据库(mysql中的哪个库)
timeout:查询超时
login_timeout:登陆超时
charset:数据库的字符集
as_dict:布尔值,指定返回值是字典还是元组
max_conn:最大连接数
其他操作于sqlite3模块是类似的,都是创建连接后创建游标,使用execute和fetchone来执行sql语句和获取结果。