Python学习—数据库操作

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

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)

原文地址:http://blog.51cto.com/13885935/2171923

时间: 2024-08-01 10:42:05

Python学习—数据库操作的相关文章

python学习之操作mysql

欢迎点击个人博客 http://www.iwangzheng.com/ 刚开始学python,所以很多代码都需要在ipython里尝试一下.今天记录的是最基本的操作mysql数据库. 写数据库连接操作的时候,仿佛回到了当年在前两家公司写asp.net的感觉. 1.首先在mysql数据库里新建个数据库 create database db_02 default charset utf8; create table user (id int auto_increment primary key,us

python之数据库操作(sqlite)

python之数据库操作(sqlite) 不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协议是在编程语言内的直接API调用.这在消耗总量.延迟时间和整体简单性上有积极的作用.整个数据库(定义.表.索引和数据本身)都在宿主主机上存储在一个单一的文件中.相比其它大型数据库来说,确实有些差距.但是包括事务(transaction),就是代表原子性.一致性.隔离性和持久性的(ACID),触发器(trigger)和多数的

python创建数据库操作

python创建数据库操作 #!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/12/23 14:01 """ grant all privileges on *.* to 'bkuser'@'%' identified by 'bkuserpwd'; 参考资料:https://blog.csdn.net/kongsuhongbaby/article/details/84948205 ""&q

python sqlite3 数据库操作

SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 2. python sqlite3模块的API """ sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的链接.您可以使用 ":memory:" 来在 RA

Python djaogo 数据库操作

一.数据库操作 1.创建Model 1 class Userinfo(models.Model): 2 id = models.AutoField(primary_key=True) 3 userName = models.CharField('用户名',max_length=20, unique=True) 4 password = models.CharField('密码', max_length=64) 5 department = models.CharField('部门',max_le

Python Mysql 数据库操作

本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作. python连接mysql的方案有oursql.PyMySQL. myconnpy.MySQL Connector 等,不过本篇要说的确是另外一个类库MySQLdb,MySQLdb 是用于Python链接Mysql数据库的接口,它

[Python]MySQLdb for Python使用指南/Python的数据库操作

网站就是要和数据库进行交互,否则什么都不用做了...今天我们来看一个叫MySQLdb的库,这个用来和MySQL数据库进行交互.可以从这里获得这个库http://sourceforge.net/projects/mysql-python如果你不确定你的python环境里有没有这个库,那就打开python shell,输入 import MySQLdb,如果返回错误信息,那就表示你的机器上没有,赶紧去下载一个.我的机器是win xp,所以我下载了win环境下的exe那个,直接双击完成安装. 在介绍具

django学习-数据库操作接口API--(CRUD)

初试API(数据库操作接口CRUD) 现在我们进入交互式python命令行,尝试一下django为你创建的各种API,通过以下命令打开python命令行: py -3 manage.py shell进入python命令行 D:\django\mysite>py -3 manage.py shell Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32 Type &quo

Python学习-list操作

Python列表(list)操作: 序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 列表创建与更新: 1 #列