大纲
数据库的基本操作
函数属性&对象方法
连接数据库
数据库的基本操作
创建数据库:
CREATE DATABASE test;
GRANT ALL ON test.* to user(s);
第一行创建了一个名为“test”的数据库,假设你是数据库的管理员,第二行语句可以为指定用户(或所有用户)提升权限
使用数据库
USE test;
如果你已经登录一个数据库系统,但是还没有选择你希望使用的数据库,这条简单的语句可以让你指定一个数据库,用来执行数据库操作。
删除数据库
DROP DATABASE test;
这条简单的语句可以从数据库中移除所有表和数据,并将其从系统中删除。
创建表
CREATE TABLE users (login VARCHAR(8), userid INT, projid INT);
这条语句创建一个新表,其中包含字符串列login,以及两个整型列:userid和projid。
删除表
DROP TABLE users;
这条简单的语句可以删除数据库中的一个表,并清空其中的所有数据。
插入行
INSERT INTO users VALUES('leanna',2111,1);
可以使用INSERT语句向数据库中插入一个新行。需要指定表名以及其中每列的值。对于本例而言,字符串“leanna”对应于login参数,而2111和1分别对应于userid和projid。
更新行
UPDATE users SET projid=4 WHERE projid=2;
UPDATE users SET projid=1 WHERE userid=311;
为了修改表中已存在的行,需要使用UPDATE语句。使用SET来确定要修改的列,并提供条件来确定修改的行。在第一个例子中,所有“projid”为2的用户需要改为4。而在第二个例子中,将指定用户(这里是userid为311的用户)移到编号为#1的项目组中。
删除行
DELETE FROM users WHERE projid=%d;
DELETE FROM users;
为了删除表中的行,需要使用DELETE FROM 命令,指定准备删除的行的表名以及可选的条件。如果没有这个条件,就会像第二个例子样,把所有行都删除了。
以上就是数据库的一些基本的操作,从上我们可以看出:
创建数据库(create)和删除数据库(drop),创建表和删除表也一样。
修改表中已存在的行叫做更新(update)和往数据库里添加新行叫做插入(insert)
而移出表中已存在的行叫做删除(delete)。
这些动作通常称为数据库命令或操作。使用可选的条件请求数据库中的行称为询查(query)。
函数属性&对象方法
connect()函数属性
user 用户名 password 密码 host 主机名 database 数据库名 MySQLdb数据库使用的是db dsn 数据源名 connect()函数通过 Connection 对象访问数据库。兼容模块必须实现 connect()函数,该函数创建并返回一个 Connection 对象。
应用与数据库之间进行通信需要建立数据库连接。它是最基本的机制,只有通过数据库连接才能把命令传递到服务器,并得到返回的结果。当一个连接(或一个连接池)建立后,可以创建一个游标,向数据库发送请求,然后从数据库中接收回应。
Connection 对象方法
Connection 对象不需要包含任何数据属性
close() 关闭数据库连接 commit() 提交当前事务 rollback() 取消当前事务 cursor() 使用该连接创建(并返回)一个游标或类游标的对象 errorhandler(cxn,cur,errcls,errval) 作为给定连接的游标的处理程序
当使用 close()时,这个连接将不能再使用,否则会进入到异常处理中。
如果数据库不支持事务处理,或启用了自动提交功能,commit()方法都将无法使用。如果你愿意,可以实现单独的方法用来启动或关闭自动提交功能。
处理的数据库而言,只需要在方法中实现“pass”即可。
和 commit()相似,rollback()方法也只有在支持事务处理的数据库中才有用。发生异常之后,rollback()会将数据库的状态恢复到事务处理开始时。
如果 RDBMS 不支持游标,那么 cursor()仍然会返回一个尽可能模仿真实游标的对象。这是最基本的要求。每个适配器开发者都可以为他的接口或数据库专门添加特殊属性。
当你完成数据库连接并关闭游标时,需要对所有操作执行 commit(),并对你的连接执行close()。
Cursor 对象
arraysize 使用fetchmany方法时,一次取出的结果行数,默认为1 connection 创建此游标的链接(可选) description 返回游标活动状态(7选项元组):(name,type_code,display_size,internal_size,precision,scale,null_ok) lastrowid 上次修改的行ID(可选:如果不支持行ID,则返回None) rowcount 上次execute*()方法处理或影响的行数 callproc(func[,args]) 调用储存过程 close() 关闭游标 execute(op[,args]) 执行数据库查询或命令 executemany(op,args) 类似execute()和map()的结合,为给定的所有参数准备执行的数据库查询或命令 fetchone() 获取查询结果的下一行 fetchmany([size=cursor.arraysize]) 获取查询结果的下面size行 fetchall() 获取查询结果的所有(剩余)行 __iter__() 为游标创建迭代器对象(可选,参考next()) messages 游标执行后从数据库中获取的消息列表(元组结合,可选) next() 被迭代器用于获取查询结果的下一行(可选,类似fetchone(),参考__iter__()) nextset() 移动到下一个结果集合(如果支持) rownumber 当前结果集中游标的索引(以行为单位,从0开始,可选) setinputsizes(sizes) 设置允许的最大输入大小(必须有,但是实现是可选的) setoutputsize(size[,col]) 设置大列获取的最大缓冲区大小(必须有,但是实现是可选的)
当建立连接后,就可以和数据库进行通信了。游标可以让用户提交数据库命令,并获得查询的结果行。
当游标创建好后,就可以执行查询或命令(或多个查询和命令),并从结果集中取回一行或多行结果。
游标对象最重要的属性是 execute*()和 fetch*()方法,所有针对数据库的服务请求都是通过它们执行的。arraysize 数据属性在为 fetchmany()设置默认大小时非常有用。当然,在不需要时关闭游标是个好主意,而如果你的数据库支持存储过程,可能会用到callproc()。
类对象和构造函数
Date (yr, mo, dy) 日期值对象 Time (hr, min, sec) 时间值对象 Timestamp (yr, mo, dy, hr, min, sec) 时间戳值对象 DateFromTicks (ticks) 日期对象,给出从新纪元时间(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数 TimeFromTicks (ticks) 时间对象,给出从新纪元时间(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数 TimestampFromTicks (ticks) 时间戳对象,给出从新纪元时间(1970 年 1 月 1 日 00:00:00 UTC)以来的秒数 Binary (string) 对应二进制(长)字符串对象 STRING 表示基于字符串列的对象,比如 VARCHAR BINARY 表示(长)二进制列的对象,比如 RAW、BLOB NUMBER 表示数值列的对象 DATETIME 表示日期/时间列的对象 ROWID 表示“行 ID”列的对象
连接数据库
以MySQL为例:
打开cmd输入:pip3 install mysqlclient 安装mysql驱动
>>> import MySQLdb as mysql 导入MySQL驱动重名为mysql >>> conn = mysql.connect('127.0.0.1','root','root') 连接数据库 >>> conn = mysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='test', charset='utf8') 也可以使用关键字连接数据库 config = { 'host': '127.0.0.1', 'port': 3306, 'user': 'root', 'passwd': 'root', 'db': 'test', 'charset': 'utf8' } conn = mysql.connect(**config) 也可以使用字典连接数据库