如果Python连接数据库出现问题请我的另一篇博客:https://blog.csdn.net/qq_39905917/article/details/88956203
创建数据库
import pymysql
db=pymysql.connect(host="localhost",user="root",password="123456",port=3306)
cursor=db.cursor() #获取数据库的操作游标
cursor.execute("select version()")
data=cursor.fetchone() #获取第一条数据
print("Database version: ",data)
cursor.execute("create database spiders default character set utf8") #创建数据库spiders,编码方式为utf-8
db.close() #关闭连接
输出如下:
Database version: ('8.0.15',)
D:\Python37\lib\site-packages\pymysql\cursors.py:170: Warning: (3719, "'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.")
result = self._query(query)
警告实际上并没有问题,通过mysql的命令行可以看到数据库已经创建成功了
创建表
记得一定要在数据库连接语句的时候就用db属性指定好数据库
import pymysql
db=pymysql.connect(host="localhost",user="root",password="123456",port=3306,db="spiders") #一定要指定好数据库
cursor=db.cursor() #获取数据库的操作游标
sql="create table if not exists students (id varchar(255) not null ,name varchar(255) not null ,age int not null ,primary key(id))"
cursor.execute(sql) #执行建表操作
db.close() #关闭连接
在mysql中查看表及各列的属性
use spiders;
show table;
desc students;
插入数据
需要执行commit()方法才可实现数据插入,这个方法才是真正将语句提交给数据库执行的方法。对于数据插入、更新、删除操作,都需要调用该方法才能生效。
import pymysql
id="20120001"; user="Bob"; age=20;
db=pymysql.connect(host="localhost",user="root",password="123456",port=3306,db="spiders")
cursor=db.cursor()
sql="insert into students(id,name,age) values(%s,%s,%s)"
try:
cursor.execute(sql,(id,user,age))
db.commit() #这个方法才是真正将语句提交到数据库执行的方法
except:
print("failed")
db.rollback() #回滚
db.close()
插入、删除、更新操作的标准写法就是:
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close()
根据字典动态构造插入方法:
import pymysql
data={
"id":"20120002",
"name":"he",
"age":20
}
table="students"
keys=",".join(data.keys())
values=",".join(["%s"]*len(data))
sql="insert into {table}({keys}) values ({values})".format(table=table,keys=keys,values=values)
db=pymysql.connect(host="localhost",user="root",password="123456",port=3306,db="spiders")
cursor=db.cursor()
try:
if cursor.execute(sql,tuple(data.values())):
print("successful")
db.commit()
except:
print("failed")
db.rollback()
db.close()
更新数据:
import pymysql
db=pymysql.connect(host="localhost",user="root",password="123456",port=3306,db="spiders")
cursor=db.cursor()
sql="update students set name = %s where id = %s"
try:
if cursor.execute(sql,("Heweitao","20120002")):
print("successful")
db.commit()
except:
print("failed")
db.rollback()
db.close()
删除数据
import pymysql
db=pymysql.connect(host="localhost",user="root",password="123456",port=3306,db="spiders")
cursor=db.cursor()
table="students"
condition="id=20120002"
sql="delete from {table} where {condition}".format(table=table,condition=condition)
try:
if cursor.execute(sql):
print("successful")
db.commit()
except:
db.rollback()
db.close()
查询数据
fetchone()方法是获取结果的第一条数据,返回结果是元组形式,fetchall()方法是得到结果的所有数据。
feechall()内部实现有一个偏移指针来用来指向查询结果,最开始偏移指针指向第一条数据,取一次只有,指针偏移到下一条数据,这样再取的话,就会取到下一条数据了。
import pymysql
db=pymysql.connect(host="localhost",user="root",password="123456",port=3306,db="spiders")
cursor=db.cursor()
sql="select * from students"
try:
if cursor.execute(sql):
print("Count:",cursor.rowcount) #查询出的总条数
one=cursor.fetchone() #获取结果的第一条数据
print("One:",one)
result=cursor.fetchall() #获取所有结果
for row in result:
print(row)
except:
print("failed")
db.close()