pycharm与数据库交互

在做项目中或者日常工作中。使用pycharm连接数据库调用数据是必须的事情,这章节就总结pycharm连接MySQL,Redis,MongoDB数据库以及操作数据的方法。

pycharm操作MySQL

pip install pymysql 安装python连接MySQL的Api包
MySQL数据库的连接:

import pymysql

db_sql = { 
    ‘user‘: ‘root‘,
    ‘password‘: ‘mysql‘,
    ‘db‘: ‘student‘,
    ‘charset‘: ‘utf8‘
}
conn = pymysql.connect(**db_sql) #连接数据库
cur = conn.cursor() #建立游标
print(cur)

cur.close() #关闭游标
conn.close()#关闭连接 ,为了节省资源,提高机器性能,使用完成务必关闭连接与游标
输出结果:
<pymysql.cursors.Cursor object at 0x000001DE827139E8>

pycharm数据库操作:

import pymysql

db_sql = { 
    ‘user‘: ‘root‘,
    ‘password‘: ‘mysql‘,
    ‘db‘: ‘student‘,
    ‘charset‘: ‘utf8‘
}
conn = pymysql.connect(**db_sql) #连接数据库
cur = conn.cursor() #建立游标
sql = ‘select * from student‘ #写入需要执行的SQL语句,注意:没有;号
#执行sql语句,执行后没有结果返回
cur.execute(sql)
#执行sql语句,执行后返回数据数量,不是数据内容
res = cur.execute(sql)
print(res) #
#执行后获取结果的方式
cur.execute(sql)
cur.fetchone() #获取一条数据
cur.fetchmany() #获取多条指定数据
cur.fetchall() #获取全部数据

cur.close() #关闭游标
conn.close()#关闭连接 ,为了节省资源,提高机器性能,使用完成务必关闭连接与游标

pycharm操作MySQL数据库的事务处理:
MySQL的事务流程:
begin;
需要执行的SQL语句;
commit;或者 rollback;
在pycharm中执行SQL语句是直接就执行事务的,所有不需要写begin。
但是在执行完成不知道是否正确的情况下,需要使用commit,还是rollback呢。可以使用异常捕捉来完成。

mport pymysql

db_sql = { 
    ‘user‘: ‘root‘,
    ‘password‘: ‘mysql‘,
    ‘db‘: ‘student‘,
    ‘charset‘: ‘utf8‘
}
conn = pymysql.connect(**db_sql) #连接数据库
cur = conn.cursor() #建立游标
try:
    sql = ‘create table student(id int primary key auto_increment,name varchar(20),sex enum("M","F"),age tinyint)‘
    cur.execute(sql)
    sql = ‘insert into student values(1,"apple","M",18),(2,"banana","F",19),(3,"pear","M",18)‘
    cur.execute(sql)
    sql = ‘select * from student‘
    cur.execute(sql)
    resone = cur.fetchone() # 游标1
    resall = cur.fetchall() # 游标从2开始
    print(resone)
    print(resall)
except Exception as e: #如果前面的sql语句出错,将执行except报错。
    print(e)
    conn.rollback() # 出现报错,sql回滚
finally:
    conn.commit() #无报错,执行提交
    cur.close()
    conn.close()
输出:
(1, ‘apple‘, ‘M‘, 18)
((2, ‘banana‘, ‘F‘, 19), (3, ‘pear‘, ‘M‘, 18))

pycharm操作redis非关系数据库

在python中,操作redis命令和命令行操作的用户几乎一摸一样。
首先导入库:安装redis :pip install redis
链接数据库:redis.StrictRedis(‘host‘:‘IP‘,decode_response=True)

import redis

res = redis.StrictRedis(host= ‘192.168.0.102‘,decode_responses=True) #l连接数据库
print(res)
输出:
Redis<ConnectionPool<Connection<host=192.168.0.102,port=6379,db=0>>>
Process finished with exit code 0
import redis

a = redis.StrictRedis(decode_responses=True,db=1) #在连接时出错,可以将IP去掉连接,db=1是转换数据库使用 。
print(a)
a.set(‘sex‘,‘M‘)
print(a.keys())
print(a.get(‘name‘))
输出:
Redis<ConnectionPool<Connection<host=localhost,port=6379,db=1>>>
[‘age‘, ‘name‘, ‘sex‘]
tom

Process finished with exit code 0

pycharm操作MongoDB

1、数据库的安装
pip install pymongo 安装pymongo

2、数据库的连接
client = pymongo.MongoClient() 连接MongoDB数据库
db = client(数据库名) 指定数据库:
collection = db(集合名) 指定集合:

import pymongo

client = pymongo.MongoClient()
db = client[‘db_name‘] #指定数据库名
my_col = db[‘tb_name‘] #指定集合名

3、文档操作
1)查找文档

操作命令 命令描述
find() (Python3官方不推荐的方法,但是可以使用)
find_one() 查找一条数据(官方建议使用方法)
find() 查找所有数据
import pymongo

client = pymongo.MongoClient()
db = client[‘lxp‘]
my_col = db[‘student‘]

res = my_col.find_one()
print(‘查询一条数据:{}‘.format(res))

rest = my_col.find() #查询所有数据后需要遍历打印出来
for i in rest:
    print(‘查询所有数据{}‘.format(i))
输出:
查询一条数据:{‘_id‘: ObjectId(‘5cbf0c144a42384099f61fd1‘), ‘name‘: ‘ooo‘}
查询所有数据{‘_id‘: ObjectId(‘5cbf0c144a42384099f61fd1‘), ‘name‘: ‘ooo‘}
查询所有数据{‘_id‘: 1.0, ‘name‘: ‘bbb‘, ‘age‘: 18.0, ‘sex‘: ‘M‘}
查询所有数据{‘_id‘: ObjectId(‘5cbf0de04a42384099f61fd4‘), ‘name‘: ‘eee‘, ‘age‘: 22.0, ‘sex‘: ‘M‘}

Process finished with exit code 0

添加文档:

操作命令 命令描述
insert() (Python3官方不推荐的方法,但是可以使用)
insert_one 插入一条数据(官方建议使用方法)
insert_many() 插入多条数据
import pymongo

client = pymongo.MongoClient()
db = client[‘lxp‘]
my_col = db[‘student‘]

res = my_col.find()
for i in res:
    print(‘插入数据前的数据:{}‘.format(i))

my_col.insert_one({‘name‘:‘apple‘,‘age‘:20,‘sex‘:‘M‘})
#print(‘查询一条数据:{}‘.format(res))

my_col.insert_many(({‘name‘:‘banana‘,‘age‘:23,‘sex‘:‘F‘},{‘name‘:‘pear‘,‘sex‘:‘M‘,‘age‘:24}))

rest = my_col.find()
for i in rest:
    print(‘插入后的数据{}‘.format(i))
输出结果:
插入数据前的数据:{‘_id‘: ObjectId(‘5cbf0c144a42384099f61fd1‘), ‘name‘: ‘ooo‘}
插入数据前的数据:{‘age‘: 18.0, ‘sex‘: ‘M‘, ‘_id‘: 1.0, ‘name‘: ‘bbb‘}
插入数据前的数据:{‘age‘: 22.0, ‘sex‘: ‘M‘, ‘_id‘: ObjectId(‘5cbf0de04a42384099f61fd4‘), ‘name‘: ‘eee‘}
插入数据前的数据:{‘age‘: 20, ‘sex‘: ‘M‘, ‘_id‘: 

插入后的数据{‘_id‘: ObjectId(‘5cbf0c144a42384099f61fd1‘), ‘name‘: ‘ooo‘}
插入后的数据{‘age‘: 18.0, ‘sex‘: ‘M‘, ‘_id‘: 1.0, ‘name‘: ‘bbb‘}
插入后的数据{‘age‘: 22.0, ‘sex‘: ‘M‘, ‘_id‘: ObjectId(‘5cbf0de04a42384099f61fd4‘), ‘name‘: ‘eee‘}
插入后的数据{‘age‘: 20, ‘sex‘: ‘M‘, ‘_id‘: 
插入后的数据{‘age‘: 20, ‘sex‘: ‘M‘, ‘_id‘: ObjectId(‘5cc3f7a392ba689595e11bde‘), ‘name‘: ‘apple‘
上一篇:mybatis查询数据库时间异常(跟当前时间相差n小时)


下一篇:Mysql性能参数优化