美文网首页
python对于Mysql的操作

python对于Mysql的操作

作者: IT_小马哥 | 来源:发表于2019-07-31 20:57 被阅读0次

错误记录:直接下载mysql安装,结果两个地方出现了MySQL 文件夹:
C:\Program Files (x86)\MySQL 和C:\Program Files\MySQL

我们需要的bin文件其实在这里:C:\Program Files\MySQL\MySQL Server 8.0\bin,然后将这个路径加入系统环境变量

启动mysql失败

启动失败.png
解决方案:
不是管理员权限,所以失败。因此启用管理员的shell,右键点击左下角图标
管理员shell.png

成功:

成功.png
知识点:
1、 mysqlworkbench的使用
2、mysql的约束(constraint)

使用命令行登录mysql账户:

1.本地登录MySQL
root是用户名,输入这条命令按回车键后系统会提示你输入密码

mysql -u root -p  

2.指定端口号登录MySQL数据库
注意指定端口的字母P为大写,而标识密码的p为小写。MySQL默认端口号为3306

mysql -u root -p  -P 3306  

3.指定IP地址和端口号登录MySQL数据库
命令格式为:mysql -h ip -u root -p -P 3306
例如: 在shell终端或者ssh终端,或者cmd窗口远程登录 端口为3308,用户名为user1,ip为 182.167.12.3 的mysql服务器的命令是

 mysql -h 182.167.12.3 -u user1 -p -P 3308

密码登录.png

我主要学习python操作mysql

导入文件

import pymysql

连接数据库(数据库里没有创建数据库),并创建一个数据库

db = pymysql.connect(host='localhost',user='root', password='password', port=3306)
# 创建游标,用游标操作数据库
#buffered=True会把结果集保存到本地并一次性返回,这样可以提高性能
cursor = db.cursor(buffered = True)
#创建了一个新的数据库examples,并设置为utf-8编码
cursor.execute("CREATE DATABASE examples DEFAULT CHARACTER SET utf8")

连接数据库里已经存在的数据库

#连接数据库spiders
db = pymysql.connect(host = 'localhost' ,user = 'root',password ='password',port = 3306,db = 'spiders')

mysql基本分为游标操作(即前边的Connection 对象)和连接操作(即前边的Cursor Objects对象)
Connection Objects的方法:

#关闭连接
db.close()

#创建游标
db.cursor()

#提交
db.commit()

#回滚
db.rollback()

Cursor Objects的方法:

#关闭游标
cursor.close()

#执行SQL语句
cursor.execute()

#获取一条数据
cursor.fetchone()

#获取很多数据
cursor.fetchmany(n)

#获取剩下的数据
cursor.fetchall()

建表

#id是varchar型非空,name是varchar型非空,age是int型非空,主键是id
sql = 'create table if not exists student(id varchar(255) NOT NULL ,name varchar(255) NOT NULL ,age INT NOT NULL,primary key(id))'
cursor.execute(sql )

写的很详细python对于mysql的增删改查,这篇文章对于我的错误之处就是插入时去重的问题,"ON DUPLICATE KEY UPDATE"对于我显示语法错误,它的SQL语句不符合我的MYSQL版本。

出现问题记录:
需求:爬取网页需要保存的字段有:title,url,content,time,source,但是因为可能存在相同的网页,所以需要去重,即url不能重复,所以必须给url设置为unique,这样插入相同的数据时就会报错:(1062, "Duplicate entry 'XXXXX' for key 'url'")
设置为主键的id为自增型的,不用自己插入id,每当插入数据,系统自动增加,但是主键的数据类型长度必须是一定的,不能是可长可短的,unique的数据类型也一样。

   sql = 'CREATE TABLE IF NOT EXISTS {0} (\
    id INT NOT NULL AUTO_INCREMENT ,\
    title LONGTEXT NOT NULL, \
    url varchar(255) NOT NULL unique ,\
    content LONGTEXT NOT NULL,\
    time LONGTEXT NOT NULL ,\
    source LONGTEXT NOT NULL,\
    PRIMARY KEY (id))'.format(table_name)

”INSERT IGNORE INTO 和 REPLACE INTO“:

INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保留数据库中已经存在数据,达到在间隙中插入数据的目的

REPLACE INTO 如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。

笔记:char和varchar的区别
首先明确的是,char的长度是不可变的,而varchar的长度是可变的,

定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,
char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

相关文章

网友评论

      本文标题:python对于Mysql的操作

      本文链接:https://www.haomeiwen.com/subject/zadxdctx.html