python中数据库的操作终结

Posted 大魔头的取经故事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中数据库的操作终结相关的知识,希望对你有一定的参考价值。

1.什么是数据库:
数据库是按照数据结构来组织存储和管理数据的仓库
2.mysql用户设置:
(1).进入数据库:mysql -u root -p 然后输入密码:xxxxx
(2).里面有个user表存储的就是表的信息: desc user;
(3)创建用户
1.INSERT INTO mysql.user(Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject)
VALUES (‘主机名‘, ‘用户名‘, PASSWORD(‘密码‘), ‘‘, ‘‘, ‘‘);

由于 mysql 数据库的 user 表中,ssl_cipher、x509_issuer 和 x509_subject 这 3 个字段没有默认值,
所以向 user 表插入新记录时,一定要设置这 3 个字段的值,否则 INSERT 语句将不能执行。
在8.0的版本里面已经不支持password函数加密了可以使用MD5或者其他的函数进行加密

2.CREATE USER ‘用户名‘@‘主机名‘ IDENTIFIED BY ‘密码‘;
在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为“%”,表示一组主机,即对所有主机开放权限
使用这个创建用户时必须有INSERT 权限或全局 CREATE USER 权限。

3.GRANT 设置权限(SELECT,INSERT,UPDATE,DELETE,CREATE,DROP) ON 权限范围(数据库.表) TO 参数指定新用户的账号,由用户名和主机名构成; [IDENTIFIED BY [加密方式] ‘密码‘]
8.0后不支持这种方式创建,要先创建用户用上面俩种方式在设置权限
eg:create user ‘牛魔王‘@‘localhost‘ identified by ‘123456‘;
grant all on *.* to ‘牛魔王‘@‘localhost‘ ;

在注意需要执行最后FLUSH PRIVILEGES 语句


(4)删除用户 Delete FROM user Where User=‘xxx‘ and Host=‘xxx‘;

数据库的常用操作:
1.use 数据库; 使用某个数据库
2.show databases; 查看mysql中的所有数据库
3.show tables;查看某个数据库的所有表
4.SHOW COLUMNS FROM 数据表: 显示莫格表的属性
5.decr 数据表
6.create database 要创建的数据库名称 charset "utf8"; 创建数据库并且指定可使用的编码;
7.drop database 数据库名称 ;#删除数据库
8.SHOW INDEX FROM 数据表:显示数据表的详细索引信息,包括PRIMARY KEY(主键)

mysql在python的操作:
第一步利用connect()函数链接数据库,并且返回数据库链接对象
数据库链接对象里面的方法与属性:
1.cursor():打开游标
2.close():关闭数据库
3.commit():提交事务
4.rollback():回滚事务
5:in_transaction:判断是否还在事务中
6.isolation_level:返回或者设置数据库链接中的事务的隔离等级
第二步:获取游标
游标对象的方法:
1.execute(要执行的sql语句):执行一条sql语句
2.executemany(要执行的sql语句,几次):重复执行sql语句
3.executescript(要执行的sql语句):执行多条sql语句(不是2.0的标准方法)
4.fetchone():查询下一跳条,如果没有了放回None
5.fetchmany():查询下M行组成列表
6.fetchall():查询所有的行组成的列表
7.close()关闭游标
游标对象的属性:
1.rowcount:返回受sql影响的行数:
2.lastrowid:获取最后修改的rowid
3.arraysize:用于设置或者获取fetchmany()默认获取的条数
4.description():用于查询最后一次查询放回所有列的的信息
5.connection:放回创建游标的数据库链接对象
第三步:执行利用游标sql语句
第四步:关闭游标
第五步:关闭数据库链接对象




1.创建表:CREATE TABLE 表名 (column_name column_type);
eg:
c.execute(‘‘‘create table order_tb(
order_id int primary key auto_increment,
name varchar (255),
pass varchar (255),
gender varchar (255)
)‘‘‘)

c.execute("""
create table order_tb(
order_id integer primary key auto_increment,
item_name varchar (255),
item_price double,
item_number double,
user_id int,
foreign key(user_id) references user_tb(user_id)
)
""")
# 4.关闭游标
c.close()
# 5.关闭链接
conn.close()


2.插入语句 :INSERT INTO table_name ( field1, field2,...fieldN )VALUES( value1, value2,...valueN );
eg:
import mysql.connector
# 1.连接数据库,mysql必须现在mysql服务器上创建数据库
conn = mysql.connector.connect(user=‘root‘, password=‘123456‘, host=‘localhost‘
, port=‘3306‘, database=‘python‘)

# 2.获取游标
c = conn.cursor()

# 3.执行sql语句
c.execute(‘insert into user_tb values (null ,%s,%s,%s)‘, (‘孙悟空‘, ‘12345‘, ‘male‘))
c.execute(‘insert into order_tb values (null ,%s,%s,%s,%s)‘,
(‘鼠标‘, ‘32.2‘, ‘3‘, 7))

# 4.关闭游标
c.close()
# 5.提交事务
conn.commit()
# 6.关闭链接
conn.close()


3.查询:
SELECT column_name,column_name FROM table_name [WHERE Clause] [OFFSET M ] [LIMIT N]
你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
你可以使用 LIMIT 属性来设定返回的记录数。

import mysql.connector
# 1.连接数据库,mysql必须现在mysql服务器上创建数据库
conn = mysql.connector.connect(user=‘root‘, password=‘123456‘, host=‘localhost‘
, port=‘3306‘, database=‘python‘)
# 2.获取游标
c = conn.cursor()
# 3.执行sql语句
c.execute(‘select * from user_tb where user_id>%s‘,(1,))
for col in (c.description):
print(col[0], end=‘ ‘)
print(‘ ---------------------------------------‘)
for row in c:
print(row) # 游标本身就是一个可迭代对象
# 4.关闭游标
c.close()
# 5.关闭链接
conn.close()

4.更改 :UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]
import mysql.connector
# 1.连接数据库,mysql必须现在mysql服务器上创建数据库
conn = mysql.connector.connect(user=‘root‘, password=‘123456‘, host=‘localhost‘
, port=‘3306‘, database=‘python‘)

# 2.获取游标
c = conn.cursor()

# 3.执行sql语句
c.execute(‘update user_tb set name="猪八戒",pass="2222" where user_id =%s‘,(7,))
# 4.关闭游标
c.close()
# 5.关闭链接
conn.commit()
conn.close()

5.删除:DELETE FROM table_name [WHERE Clause]
6.模糊查询:
SELECT field1, field2,...fieldN table_name1, table_name2... WHERE field1 LIKE condition1 [AND [OR]] filed2 = ‘somevalue‘
1%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)eg(‘‘%猪%‘)
2._: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
3.[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
4.[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符

7.排序:
SELECT field1, field2,...fieldN table_name1, table_name2... ORDER BY field1, [field2...] [ASC [DESC]]
使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
eg: select *from student where name like binary "%Li" order by stu_id desc;

8.统计:
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;
eg:SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
eg:SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP;

9.1增加字段:alter table 表名 add 字段名 字段类型; #添加phone字段
9.2删除字段:alter table 表名 drop 字段名称;
9.3修改字段: alter table表名 MODIFY 字段名 修改成什么类型;
alter table表名 change i j BIGINT;
9.4修改表名:alter table表名 rename TO 新表名;


10.连接JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录.
eg: select * from a INNER JOIN b on a.a = b.b 相当与 select a.*,b.* from a,b where a.a = b.b
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
eg:select * from a LEFT JOIN b on a.a = b.b;
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
eg:select * from a RIGHT JOIN b on a.a = b.b;

以上是关于python中数据库的操作终结的主要内容,如果未能解决你的问题,请参考以下文章

终结 Python 原生字典?这个库要逆天改命了

Python3 IO编程之文件读写

python基础19 -------面向对象终结篇(介绍python对象中各种内置命令)

python基础27 -----python进程终结篇-----IO模型

归约分组与分区,深入讲解JavaStream终结操作

WCF 设计和实现服务协定(01)