pymysql建表_Python数据库操作,针对pymysql 和 MYSQL数据库

此文将以MYSQL数据库做为例子,pymysql库作为驱动进行学习

安装MYSQL数据库与pymysql第三方库

安装pymysql库不多做叙述

安装navicat for mysql,此程序用来管理MYSQL数据库

注意: 连接过程中可能会出现1251错误

解决办法,在cmd命令下登录mysql后输入:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql的密码'; 注意:引号中的为你自己设置的sql数据库的密码

FLUSH PRIVILEGES;

pymysql 连接mysql数据库的驱动库

Connection(host = None,user = None,password ='',database = None,port = 0,unix_socket = None,charset ='',sql_mode = None,read_default_file = None,conv = None,use_unicode = None,client_flag = 0,cursorclass = ,init_command = None,connect_timeout = 10,ssl = None,read_default_group = None,compress = None,named_pipe = None,自动提交=假,分贝=无,passwd的=无,local_infile =假,max_allowed_pa​​cket个= 16777216,defer_connect =假,auth_plugin_map =无,read_timeout =无,write_timeout =无,bind_address =无,binary_prefix =假,程序名=无,server_public_key =无) 类

read_timeout - 以秒为单位读取连接的超时(默认值:无 - 无超时)

write_timeout - 以秒为单位写入连接的超时(默认值:无 - 无超时)

charset - 你要使用的Charset。

sql_mode - 要使用的默认SQL_MODE。

read_default_file - 指定my.cnf文件以从[client]部分下读取这些参数。

conv - 使用转换字典而不是默认字典。这用于提供类型的自定义编组和解组。见转换器。

use_unicode - 是否默认为unicode字符串。对于Py3k,此选项默认为true。

client_flag - 要发送给MySQL的自定义标志。在constants.CLIENT中查找潜在值。

cursorclass - 要使用的自定义游标类。

init_command - 建立连接时要运行的初始SQL语句。

connect_timeout - 连接时抛出异常之前的超时。(默认值:10,最小值:1,最大值:31536000)

ssl - 类似于mysql_ssl_set()参数的参数的dict。目前,不支持capath和cipher参数。

read_default_group - 要在配置文件中读取的组。

compress - 不支持

named_pipe - 不支持

autocommit - 自动提交模式。无表示使用服务器默认值。(默认值:False)

local_infile - 允许使用LOAD DATA LOCAL命令的布尔值。(默认值:False)

max_allowed_pa​​cket - 发送到服务器的最大数据包大小(以字节为单位)。(默认值:16MB)仅用于限制小于默认值(16KB)的“LOAD LOCAL INFILE”数据包的大小。

defer_connect - 不要明确连接contruction - 等待连接调用。(默认值:False)

auth_plugin_map - 插件名称的一个字典,用于处理该插件的类。该类将Connection对象作为构造函数的参数。该类需要一个认证方法,将认证包作为参数。对于对话框插件,可以使用提示(echo,prompt)方法(如果没有authenticate方法)从用户返回字符串。(实验)

server_public_key - SHA256 authenticnticaiton插件公钥值。(默认:无)

db - 数据库的别名。(与MySQLdb兼容)

passwd - 密码的别名。(与MySQLdb兼容)

binary_prefix - 在字节和bytearray上添加_binary前缀。(默认值:False)

常用方法

select_db(db) 设置db为当前数据库

cursor() 创建一个游标对象,继而对数据进行操作

游标对象方法:

execute(query,args = None ) 执行sql语句

executemany(query,args ) 运行多个sql语句

fetchall() 获取所有行

fetchmany(size = None ) 获取指定行数

fetchone() 获取下一行

close() 关闭游标,将缓存的数据全部释放到数据库中

commit() 提交对数据库中数据的修改,使之持久化到数据库中

close() 关闭套接字连接退出

SQL语句

SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统

MySQL 数据类型

Text 类型

image

Number 类型

image

Date 类型

image

SQL的语句分为两大类,一类是DML,另一类是DDL

数据定义语言 (DDL) 用于创建或删除表格

CREATE DATABASE 创建新数据库

语句: CREATE DATABASE database_name

import pymysql

con = pymysql.connect('localhost','root','123456')

sql = '''CREATE DATABASE test

'''

with con.cursor()as cursor:

cursor.execute(sql)

con.close()

CREATE TABLE 创建新表

语句为以下形式,其中约束可以没有

CREATE TABLE 表名称

(

列名称1 数据类型 约束,

列名称2 数据类型 约束,

列名称3 数据类型 约束,

....

)

约束条件

NOT NULL 值不能为空

UNIQUE 设置索引,一个表中可以有多个索引

在创建表时,末尾加上该语句

UNIQUE(列名称)

表创建以后添加索引

ALTER TABLE 表名称

ADD UNIQUE (列名称)

撤销索引

ALTER TABLE 表名称

DROP INDEX 列名称

PRIMARY KEY 设置主键,一个表中只能有一个主键

在创建表时,末尾加上该语句

PRIMARY KEY (列名称)

表创建后添加主键

ALTER TABLE表名称

ADD PRIMARY KEY (列名称)

撤销表中的主键

ALTER TABLE 表名称

DROP PRIMARY KEY

FOREIGN KEY 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY

在创建表时,末尾加上该语句

FOREIGN KEY (列名称) REFERENCES 表名称(列名称)

表创建后添加FOREIGN KEY

ALTER TABLE 表名称1

ADD FOREIGN KEY (列名称)

REFERENCES 表名称2(列名称)

删除表中的PRIMARY KEY

ALTER TABLE 表名称

DROP FOREIGN KEY 约束名称

CHECK 限制列中的值的范围

在创建表时,末尾加上该语句

CHECK (列名称 范围限制)

表创建后添加限制范围

ALTER TABLE 表名称

ADD CHECK (列名称 范围限制)

撤销范围限制

ALTER TABLE 表名称

DROP CONSTRAINT 约束名称

DEFAULT 向列中插入默认值

在创建表时,向数据后添加默认值

列名称 数据类型 DEFALUT 默认值

表创建后添加默认值

ALTER TABLE 表名称

ALTER 列名称 SET DEFAULT 默认值

删除默认值

ALTER TABLE 表名称

ALTER 列名称 DROP DEFAULT

AUTO_INCREMENT 新记录插入表中时生成一个唯一的数字

在创建表时,在后面添加该字段即可

列名称 int NOT NULL AUTO_INCREMENT

默认以1开始递增,但也可以通过赋值来改变初始值

ALTER TABLE 表名称 AUTO_INCREMENT=100

创建新数据是不必向该数据进行赋值,但应加上NULL,代替该数据,会自动进行赋值

# 新建一个名为person的表,定义有id,name,age,address 其中id设置为主键,并采取自增形式

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = '''CREATE TABLE person

(

id INT(255) NOT NULL PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(255),

age INT(100),

address VARCHAR(255)

)

'''

with con.cursor()as cursor:

cursor.execute(sql)

con.close()

CREATE INDEX 创建表中的引索

用于加速搜索数据,用户无法看见,只需设置常用的列

使用以下语句

CREATE INDEX 引索名称

ON 表名称 (列名称)

DROP 删除索引、表和数据库

删除表

DROP TABLE 表名称

删除数据库

DROP DATABASE 数据库名称

删除表中数据,但保留表

TRUNCATE TABLE 表名称

ALTER TABLE 在已有的表中添加、修改或删除列

向表中添加列

ALTER TABLE 表名称

ADD 列名称 列类型

向表中删除列

ALTER TABLE 表名称

DROP COLUMN 列名称

更改表中某一列的数据类型

ALTER TABLE 表名称

ALTER COLUMN 列名称 列类型

数据操作语言 (DML) 包含用于更新、插入和删除记录的语法

SELECT 选取数据

SELECT 列名称 FROM 表名称

SELECT DISTINCT 去掉重复数据

SELECT DISTINCT 列名称 FROM 表名称

WHERE 有条件的选取数据

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

运算符

= 等于

<> 不等于

> 大于

< 小于

>= 大于等于

<= 小于等于

操作符

IN 允许在 WHERE 子句中规定多个值,返回包含这些值的集合

SELECT column_name(s)

FROM table_name

WHERE column_name IN (value1,value2,...)

BETWEEN 选取介于两个值之间的数据范围 左包右闭

SELECT column_name(s)

FROM table_name

WHERE column_name

BETWEEN value1 AND value2

AND 和 OR 对一个以上的条件对记录进行过滤

SELECT * FROM 表名称 WHERE 列名称 运算符 值 AND 列名称 运算符 值

总结: 可以将AND OR WHERE 组合起来使用,用于查找精确的数据

LIKE 于在 WHERE 子句中搜索列中的指定模式,类似于正则表达式

SELECT column_name(s)

FROM table_name

WHERE column_name LIKE pattern

通配符

image

ORDER BY 语句用于对结果集进行排序

默认顺序排序,字母以ABC形式,数字从大到小

SELECT 列名称 FROM 表名称 ORDER BY 列名称

添加DESC可变为逆序排序

SELECT 列名称 FROM 表名称 ORDER BY 列名称 DESC

LIMIT 规定返回数据集合的最大值

"SELECT column_name(s)

FROM table_name

LIMIT number"

INTO 从一个表中选取输出并复制到另一个表中,用于备份数据库

备份到另一个数据库中

SELECT *

INTO new_table_name IN externaldatabase

FROM old_tablename

备份到另一个表中

"SELECT *

INTO Persons_backup

FROM Persons

INSERT INTO 项数据库添加新行

向一行中添加数据

INSERT INTO 表名称 VALUES (值1, 值2,....) 添加所有值

向一行中选取的列中添加数据

INSERT INTO 表名称 (列1, 列2,...) VALUES (值1, 值2,....)

UPDATE 修改表中的数据

修改某列数据为某值的数据为新值

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

向某行中的多列修改数据

UPDATE 表名称 SET 列名称1 = 新值1,列名称2 = 新值2,…. WHERE 列名称 = 某值

DELETE 删除表中的行

删除列名称为某值的所有行

DELETE FROM 表名称 WHERE 列名称 = 值

删除所有行,即清空所有数据

DELETE * FROM table_name

向数据库的person表中写入一行数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = ''' INSERT INTO person VALUES(NULL,'jack',18,'Beijing')

'''

with con.cursor()as cursor:

cursor.execute(sql)

con.commit()

con.close()

写入多行数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

list = [(None,'jack',18,'beijing'),(None,'bob',20,'shanghai'),(None,'alice',10,'beijing'),(None,'luna',18,'shengzheng')]

with con.cursor()as cursor:

cursor.executemany('INSERT INTO person VALUES(%s,%s,%s,%s)',list)

con.commit()

con.close()

查找所有数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = 'SELECT * FROM person'

with con.cursor()as cursor:

cursor.execute(sql)

data = cursor.fetchall()

for i in data:

print(i)

con.close()

查找所有地址为beijing的数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person where address = 'beijing'"

with con.cursor()as cursor:

cursor.execute(sql)

data = cursor.fetchall()

for i in data:

print(i)

con.close()

查找所有age大于10的数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person where age > 10"

with con.cursor()as cursor:

cursor.execute(sql)

data = cursor.fetchall()

for i in data:

print(i)

con.close()

查找age大于10并且address等于bejing的数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person where age > 10 AND address = 'beijing'"

with con.cursor()as cursor:

cursor.execute(sql)

data = cursor.fetchall()

for i in data:

print(i)

con.close()

将所有数据按年龄大小进行逆序排序

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "SELECT * FROM person ORDER BY age DESC"

with con.cursor()as cursor:

cursor.execute(sql)

data = cursor.fetchall()

for i in data:

print(i)

con.close()

修改表中jack的age为16

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "UPDATE person set age = 16 WHERE name = 'jack'"

with con.cursor()as cursor:

cursor.execute(sql)

con.commit()

con.close()

删除数据库中jack的数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "DELETE FROM person WHERE name = 'jack'"

with con.cursor()as cursor:

cursor.execute(sql)

con.commit()

con.close()

删除表中所有数据

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = "DELETE FROM person"

with con.cursor()as cursor:

cursor.execute(sql)

con.commit()

con.close()

向表中添加sex列,类型为varchar

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = '''ALTER TABLE person

ADD sex VARCHAR(255)

'''

with con.cursor()as cursor:

cursor.execute(sql)

con.commit()

con.close()

删除表

import pymysql

con = pymysql.connect('localhost','root','123456')

con.select_db('test')

sql = '''DROP TABLE person

'''

with con.cursor()as cursor:

cursor.execute(sql)

con.commit()

con.close()

删除数据库

import pymysql

con = pymysql.connect('localhost','root','123456')

sql = '''DROP DATABASE test

'''

with con.cursor()as cursor:

cursor.execute(sql)

con.commit()

con.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0到1使用VUE-CLI3开发实战(五):模块化VUEX及使用vuetify

小肆前几天发了一篇2019年Vue精品开源项目库的汇总&#xff0c;今天小肆要使用的是在UI组件中排行第三的Vuetify。vuetify介绍 Vuetify是一个渐进式的框架&#xff0c;完全根据Material Design规范开发&#xff0c;一共拥有80多个组件&#xff0c;对移动端支持非常好。 支持SSR…

详解垃圾回收算法

分享一波:程序员赚外快-必看的巅峰干货 标记清除算法 概念 该算法有两个阶段。 标记阶段&#xff1a;找到所有可访问的对象&#xff0c;做个标记。 清除阶段&#xff1a;遍历堆&#xff0c;把未被标记的对象回收 缺点&#xff1a;会产生碎片&#xff0c;不够连贯 应用场景…

智能情绪分析技术_石化缘推荐:炼化企业智能机器人巡检技术应用前景分析!...

本期内容由湖南天一奥星泵业有限公司冠名炼化企业智能机器人巡检技术应用前景分析王国彤1,孙秉才2,储胜利2,宋亚敏1(1.中国石油天然气股份有限公司大连石化分公司&#xff0c;辽宁省大连市&#xff1b;2.中国石油集团安全环保技术研究院有限公司&#xff0c;北京市)摘要&#x…

CentOS 7编译程序后的环境变量设置

今晚在 CentOS 7 上配置 Gitea&#xff0c;配置完成后在本地 clone 仓库会提示 Failed to execute git command: exec: "git-upload-pack": executable file not found in $PATH&#xff0c;果断用软连接打法解决。随后在 push 时又出现 Failed to execute git comma…

详解:JVM内存调优参数

分享一波:程序员赚外快-必看的巅峰干货 -Xms JVM启动时申请的初始Heap值&#xff0c;默认为操作系统物理内存的1/64但小于1G。默认当空余堆内存大于70%时&#xff0c;JVM会减小heap的大小到-Xms指定的大小&#xff0c;可通过-XX:MaxHeapFreeRation来指定这个比列。Server端JV…

数组指针 sizeof 实现_C++数组指针!

学习C数组的时候&#xff0c;对数组的了解不是很深。也不知道&#xff0c;为什么声明一个数组&#xff0c;int a[10]&#xff0c;为什么a就是数组的地址。你可以这样理解&#xff0c;将a理解为指向数组头的一个指针&#xff0c;这样就好理解了。理解了之后确实好像豁然开朗的样…

利用人工智能提升团队包容性

在2018年11月举行的Gartner应用技术与解决方案峰会上&#xff0c;高级主管分析师John Kostoulas认为&#xff0c;积极培养包容性文化的团队和团队领导者将超越他们的目标。Kostoulas引用了CEB-Gartner在2016年进行的一项领导力验证调查&#xff0c;他指出&#xff0c;性别多元化…

表单验证开发 - 登录注册开发(3)

表单验证开发 - 登录注册开发(3) 一、教程目标 学习如何在表单中添加验证规则。掌握使用 JSON 配置表单验证规则的方法。实现前端和后端的表单验证。 二、教程内容 1. 前端表单验证 步骤 1&#xff1a;找到表单编辑 在页面上找到需要编辑的表单&#xff0c;如注册表单或登录…

count(1),count(*),count(主键) 性能对比及辟谣

分享一波:程序员赚外快-必看的巅峰干货 前言 前段时间关于统计数量的sql问题和朋友进行了讨论&#xff0c;网上关于这三种查询方式说法不一&#xff0c;主要有以下两种说法。 count(*) count(主键) > count(1) count(主键) > count(*) > count(1)今天对这三种方式…

python与会计的论文_甭管前浪后浪,写完论文的先浪!

原标题&#xff1a;甭管前浪后浪&#xff0c;写完论文的先浪&#xff01;自愿返校已是板上钉钉的事儿了而对于大家的期末考现在也基本上已经通知线上考试如果没有线上考试的话&#xff0c;那就是交论文可是&#xff0c;论文动不动就2000字10%查重毛概、各种选修课等等每一门都是…

git 命令 clone分支的代码

一个项目通常含有很多分支&#xff0c; master分支一般是经过测试&#xff0c;验证没有问题后&#xff0c;代码才会提交到master分支 develop分支&#xff0c;是测试经常拉下来进行测试的分支 直接复制develop分支的git 命令如下&#xff1a; git clone -b develop gitxxx 转载…

String s = new String(123) 究竟创建了几个对象

分享一波:程序员赚外快-必看的巅峰干货 前言 今天上班划水的过程中有人询问到这个问题&#xff0c;网上对于这个问题也有争议&#xff0c;有说创建了一个对象&#xff0c;有说两个&#xff0c;有说三个。 首先说三个的肯定是扯淡了&#xff0c;今天来讨论一下这条语句到底创…

jquery级试题_JS-jQuery练习题面试题

ES5中不能实现继承的关键字A prototypeB callC applyD extends正确答案: D extends //属于ES6不属于常见23种设计模式A 单例B MVCC 观察者D 策略正确答案: B创建型模式&#xff0c;共五种&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式&…

Vue 计算属性与侦听器

这一节我们一起学习 vue 中的计算属性(computed properties)和侦听器(watch)。 在之前&#xff0c;我们学习过 vue 表达式插值&#xff1a; <div id"example">{{ message.split().reverse().join() }} </div> 如果在模板中放入太多的逻辑会让模板过重且难…

程序员到底要不要重复造轮子?

分享一波:程序员赚外快-必看的巅峰干货 关于这个话题&#xff0c;现在这里阐述立场&#xff1a;就公司工作而言&#xff0c;不建议重复造轮子。就个人技术而言&#xff0c;强烈建议造轮子&#xff01; 程序员圈子里流行这么一句话&#xff1a;“不要重复造轮子”。它的原文是…

1582年日历怎么了_【知乎周边】知乎2020年日历开箱+测评

感谢 刘看山 刘看山福利社 知一声 这边知乎朋友赠送的礼物&#xff0c;这边拿到了新的一年2020年知乎的日历。随日历还赠送了一年的盐选会员体验卡&#xff0c;这个福利很特别哈。打开盒子&#xff0c;里面是厚厚的但是却不是很大的一个正方体。侧面写有“有问题的日历”日历内…

Redis集群一致性Hash效果的代码演示

在微服务领域&#xff0c;使用Redis做缓存可并不是一件容易的事情。 像新浪、推特这样的应用&#xff0c;许许多多的热点数据全都存放在Redis这一层&#xff0c;打到DB层的请求并不多&#xff0c;可以说非常依赖缓存了。如果缓存挂掉&#xff0c;流量全部穿透到DB层&#xff0c…

多线程-题

1、进程和线程之间有什么不同&#xff1f; 一个进程是一个独立&#xff08;self contained&#xff09;的运行环境&#xff0c;它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进…

JDK8那些惊为天人的新特性

分享一波:程序员赚外快-必看的巅峰干货 介绍 随着java的发展&#xff0c;越来越多的企业开始使用 java8 版本。Java8 是自 java5之后最重要的版本&#xff0c;这个版本包含语言、编译器、库、工具、JVM等方面的十多个新特性。本次课程将着重学习其中的一些重点特性。 Jdk8新…

mount 安卓system只读_Android如何让system分区可读写(MTK安卓6.0)-阿里云开发者社区...

Android 系统默认情况下&#xff0c;system 分区是只读 mount 的&#xff0c;因为无法进行往里写数据的&#xff0c;可以用 adb 命令 adb remount 重新 mount 一下。也可以通过在板子上&#xff0c;输入以下命令重新mount一下system分区命令使其可读可写。# mount -o remount /…