Python学习—数据库操作

python2中操作数据库:MySQLdb
python3中操作数据库:pymysql

创新互联建站-专业网站定制、快速模板网站建设、高性价比清河网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式清河网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖清河地区。费用合理售后完善,10多年实体公司更值得信赖。

python接连数据库

1.创建数据库连接:

    mysql.connect()函数

2.执行数据库操作:
执行数据库操作,我们要使用连接对象获得一个cursor(游标)对象:

用连接对象的cursor()方法返回一个游标对象

接下来,我们会使用cursor提供的方法来进行工作. 这些方法包括两大类:1.执行命令,2.接收返回值

    执行命令:
        callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
        execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数,它执行查找语句时的返回值是查找到的记录条数。
        executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
        nextset(self):移动到下一个结果集
    接受返回值:
        fetchall(self):接收全部的返回结果行.返回值也是元组,元组中的元素也是元组
        fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.返回结果时元组,元组的元素是整条记录的元组
        fetchone(self):返回一条结果行.游标移动到下一条记录开头
        scroll(self, value, mode='relative'):移动指针到某一行.
            如果mode='relative',则表示从当前所在行移动value条,value可以是负数,表示向前移动,正数表示向后移动
            如果mode='absolute',则表示从结果集的第一行移动value条.value=0则表示结果集的开头,
    游标属性:
        游标对象.description:返回表的结构(包括字段名等),返回结果是一个元组,元组内元素是每个字段信息构成的元组

3.关闭数据库:

    关闭数据库前先关闭游标:游标对象.close()
    关闭数据库连接:连接对象.close()
1.查询符合条件的记录:
select count(*) from tablename where col = 'col';
这种方法性能上有些浪费,没必要把全部记录查出来。
select 1 from tablename where col = 'col' limit 1;
执行这条sql语句,所影响的行数不是0就是1。

特别解释下limit 1,mysql在找到一条记录后就不会往下继续找了。性能提升很多。
结论:推荐第二种方式。

2.添加用户:
create user:没有任何权限只能登陆。
添加用户的同时赋予权限:grant user

在新添加用户时候,如果没有在用户名后指定本地登陆或者远程登陆,这个用户默认是可以远程登陆的。
drop user 可以同时删除多个允许远程登陆的用户(不用跟@'%')。

查看所有用户
SELECT User, Host, Password FROM mysql.user;
3. mysql的备份与恢复

备份:

备份数据库mariadb下的所有表到文件mariadbdump
mysqldump -uroot -p mariadb >mariadb.dump
备份数据库mariadb下的所有表的结构到文件mariadbdump,不备份其中的数据
mysqldump -uroot -pwestos --no-data mariadb > `date +%Y_%m_%d`_mariadb.dump
备份所有的数据库的所有表到文件mariadbdump
mysqldump -uroot -pwestos --all-databases >mariadb4.dump

恢复:

mysqladmin -uroot -pwestos create mariadb2
mysql -uroot -pwestos mariadb2< mariadb.dump

----->在用python的MysqlDB包对Mysql进行insert操作时出现了问题,程序运行不报错,insert语句也没有问题,但是新的数据一直没有插入到数据库中。在查阅了资料之后,发现是未提交的原因。
数据库语言可分为四种,

    数据操作语言(Date Manipulation Language)DML语言,实现对数据的基本操作,”增删改”。
        UPDATE DELETE INSERT
    数据定义语言(Data Definition Language )DDL语言,可以实现对数据库结构、操作方法等的定义:
        create table 创建表
        alter table 修改表
        drop table 删除表
        truncate table 删除表中所有行
        create index 创建索引
        drop index 删除索引**
    数据库控制语言(Data Control Language)DCL授权,角色控制
        GRANT 授权
        REVOKE 取消授权
    事务控制语言(Transaction Control Language)事务控制语言
        SAVEPOINT 设置保存点
        ROLLBACK 回滚
        SET TRANSACTION

在这之中,DDL语句是自带commit的,而执行DML命令如果没有提交,将不会被其他会话看到。除非在DML命令之后执行了DDL命令或DCL命令,或用户退出会话,或终止实例,此时系统会自动发出commit命令,使未提交的DML命令提交。

所以在执行了UPDATE,INSERT操作都执行一下提交命令:连接对象.commit()
另外,在连接数据库的时候,有一个默认参数:autocommit,它默认值为False,在连接数据库的时候设置这个参数autocommit=True,就可以不用再调用commit()方法了。

参考博客:https://blog.csdn.net/lee_zix/article/details/52216126

----->mysql语句中----删除表数据drop、truncate和delete的用法:
程度从强到弱

1、drop  table tb
      drop将表格直接删除,没有办法找回
2、truncate (table) tb
      删除表中的所有数据,不能与where一起使用
3、delete from tb (where)
      删除表中的数据(可制定某一行)

区别:truncate和delete的区别
         1、事务:truncate是不可以rollback的,但是delete是可以rollback的;
              原因:truncate删除整表数据(ddl语句,隐式提交),delete是一行一行的删除,可以rollback
         2、效果:truncate删除后将重新水平线和索引(id从零开始) ,delete不会删除索引
         3、 truncate 不能触发任何Delete触发器。
         4、delete 删除可以返回行数

来自:https://www.cnblogs.com/shuaiandjun/p/6042600.html

"""

"""

4.查询所有字段

def list_col(localhost, username, password, database, tabls_name):
    db = pymysql.connect(localhost, username, password, database, charset="utf8")
    cursor = db.cursor()
    cursor.execute("select * from %s" % tabls_name)
    col_name_list = [tuple[0] for tuple in cursor.description]
    db.close()
    return col_name_list

5.列出所有的表

def list_table(localhost, username, password, database):
    db = pymysql.connect(localhost, username, password, database, charset="utf8")
    cursor = db.cursor()
    cursor.execute("show tables")
    table_list = [tuple[0] for tuple in cursor.fetchall()]
    db.close()
    return table_list

例子:


import pymysql as mysql
u = 'root'
p = 'westos'
d = 'python'

# connect函数创建数据库或者打开数据库,返回一个数据库的连接对象,程序员通过连接对象访问数据库
conn = mysql.connect(user=u,passwd=p,db=d,charset='utf8',autocommit=True)
#cursor函数创建一个游标
cur = conn.cursor()
#execute函数执行sql语句
try:
    cur.execute('create table employee(id int,name varchar(20),age int,sex enum("男","女"),salary int,department varchar(40));')
    cur.execute('insert into employee values(1,"张三",18,"男",5000,"IT部门"),(3,"李四",20,"男",6000,"市场部"),(2,"小红",28,"女",10000,"人事部");')
    cur.execute('delete from employee where name="张三";')
    cur.execute('update employee set sex="女" where name ="李四";')
except:
    print("error......11111......")
else:
    print('success....11111......')

li = [(i,'user'+str(i),123456) for i in range(1,21)]
try:
    cur.executemany('insert into users values(%s,%s,%s);',li)
    cur.execute('select * from users;')
except:
    print("error......222......")
else:
    print('success....222......')

#用tmp来接收从数据库查询到的所有记录。
tmp = cur.fetchall()
cur.close()
conn.close()
for i in tmp:
    print(i)

网站栏目:Python学习—数据库操作
转载源于:http://azwzsj.com/article/ppccod.html