Python2中则使用mysqldb
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
看下一篇文章Python3 MySQL二 PyMySQL
数据库名:atest
表:user
目录
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
1.连接数据库
import mysql.connector
anewab = mysql.connector.connect(
host="localhost",
user="root",
passwd=""
)
print(anewab)
2.创建数据库、创建表
创建数据库atest
import mysql.connector
anewab = mysql.connector.connect(
host="localhost",
user="root",
passwd="",
)
mycursor = anewab.cursor()
# 创建数据库
mycursor.execute("CREATE DATABASE atest")
在atest数据库创建表user
import mysql.connector
anewab = mysql.connector.connect(
host="localhost",
user="root",
passwd="",
# 指定数据库
database="atest"
)
mycursor = anewab.cursor()
# 创建表
mycursor.execute("create table user(name VARCHAR (10), age integer(3) )")
给已存在的表user设置主键
# 设置主键
mycursor.execute("alter table user add column id int auto_increment primary key ")
如果表未存在,创建表的同时设置主键
mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
3.插入表数据
import mysql.connector
anewab = mysql.connector.connect(
host="localhost",
user="root",
passwd="",
# 指定数据库
database="atest"
)
mycursor = anewab.cursor()
# 插入数据
sql = "insert into user(name,age) values (%s, %s)"
val = ("陈奕迅", 18)
mycursor.execute(sql, val)
# 数据表内容有更新,必须使用到该语句提交
anewab.commit()
# rowcount只会记录未被提交的最后一条SQL语句的影响行数
print(mycursor.rowcount, "插入成功")
插入多条数据
# 插入数据
sql = "insert into user(name,age) values (%s, %s)"
val = [
("周杰伦", 18),
("李宇春", 18),
("汪苏泷", 18),
("许嵩", 18)
]
# 注意这里用executemany
mycursor.executemany(sql, val)
anewab.commit()
print(mycursor.rowcount, "插入成功")
获取插入的ID
mycursor.lastrowid
4.查询数据
获取所有用fetchall()
import mysql.connector
anewab = mysql.connector.connect(
host="localhost",
user="root",
passwd="",
# 指定数据库
database="atest"
)
mycursor = anewab.cursor()
mycursor.execute("select * from user")
myresult = mycursor.fetchall()
for x in myresult:
print(x)
获取一条可以用fetchone()
mycursor.execute("select * from user")
myresult = mycursor.fetchone()
print(myresult)
为了防止数据库查询发生 SQL 注入的攻击,我们可以使用 %s 占位符来转义查询
升序
降序 用desc
限制查询数量:
select * from user limit 3
指定起始位置,使用的关键字是 OFFSET:
"select * from user limit 3 offset 2
5.删除数据
注意:要慎重使用删除语句,删除语句要确保指定了 WHERE 条件语句,否则会导致整表数据被删除。
6.update数据
sql = "update user set name='陈奕迅2' where name = '陈奕迅'"
mycursor.execute(sql)
anewab.commit()
UPDATE 语句要确保指定了 WHERE 条件语句,否则会导致整表数据被更新。
7.删除表
mycursor.execute("drop table if exists user")
8.删除数据库
mycursor.execute("drop database if exists atest")