Python下连接数据库(mysql)的操作及应用
程序员文章站
2022-05-18 09:28:14
...
######连接数据库(mysql)的操作及应用######
## 在pycharm下连接数据库的操作
## 连接数据库的方法
- 创建连接时指定本地用户连接:
import pymysql
pymysql.connect ( user='hello', password='hello', charset=utf8, autocommit=Ture )
- 创建连接时其它主机用户连接L
import pymysql
pymysql.connect(host="IP", user='hello', password='hello', charset=utf8, autocommit=Ture )
- 注:
charset=utf8设置其编码格式,在新建表时可以输入中文,autocommit=Ture自动提交对数据库的操作(conn.commit()).
## 下面我们在pycharm上对数据库进行操作:
import pymysql
# 1. 连接数据库, host, user, passwd, charset
conn = pymysql.connect(user='hello',
password='hello', charset='utf8', autocommit=True)
# 2. 创建一个游标, 用来给数据库发送sql语句的;
cur = conn.cursor()
import pymysql
conn = pymysql.connect(user='hello', password='hello', charset='utf8', autocommit=True)
# 创建一个游标, 用来给数据库发送sql语句
cur = conn.cursor()
# 对于数据库实现增删改查操作
conn.select_db('houzeyu')
# 创建表
try:
createTable = 'create table myusers (name varchar(20) not null, age int not null);'
cur.execute(createTable)
pass
except Exception as e:
print('Fail', e)
else:
print('success')
#关闭游标
cur.close()
#关闭数据库连接
conn.close()
- 添加表内容:
import pymysql
conn = pymysql.connect(user='hello', password='hello', charset='utf8', autocommit=True)
# 创建一个游标, 用来给数据库发送sql语句
cur = conn.cursor()
# 对于数据库实现增删改查操作
conn.select_db('houzeyu')
# 创建表
try:
# createTable = 'create table myusers (name varchar(20) not null, age int not null);'
# cur.execute(createTable)
insert1 = 'insert into myusers values("user1", 101);'
insert2 = 'insert into myusers values("user2", 102);'
cur.execute(insert1)
cur.execute(insert2)
pass
except Exception as e:
print('Fail', e)
else:
print('success')
#关闭游标
cur.close()
#关闭数据库连接
conn.close()
- 批量添加:
import pymysql
conn = pymysql.connect(user='hello', password='hello', charset='utf8', autocommit=True)
# 创建一个游标, 用来给数据库发送sql语句
cur = conn.cursor()
# 对于数据库实现增删改查操作
conn.select_db('houzeyu')
# 创建表
try:
users = [('user'+str(i), '30') for i in range(20)]
insert_add = 'insert into myusers values(%s,%s);'
cur.executemany(insert_add, users)
select = 'select * from myusers;'
res=cur.execute(select)
print(res)
pass
except Exception as e:
print('Fail', e)
else:
print('success')
#关闭游标
cur.close()
#关闭数据库连接
conn.close()
注意:
select = 'select * from myusers;'
res=cur.execute(select)
print(res)
其返回值打印出的结果其实是表中统计用户的数量,而非用户信息
- 如何查看用户信息如下:
import pymysql
conn = pymysql.connect(user='hello', password='hello', charset='utf8', autocommit=True)
# 创建一个游标, 用来给数据库发送sql语句
cur = conn.cursor()
# 对于数据库实现增删改查操作
conn.select_db('houzeyu')
# 创建表
try:
select = 'select * from myusers;'
res=cur.execute(select)
print(res)
# 查看查看表中的数据
# cur.fetchone类似与文件的操作f.readline, 每次只读取一条记录;
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
pass
except Exception as e:
print('Fail', e)
else:
print('success')
#关闭游标
cur.close()
#关闭数据库连接
conn.close()
# cur.fetchmany, 类似于f.readlines, 返回的是一个元组; print("查找5条记录:",cur.fetchmany(5))
# 移动游标的位置, 到记录的最开始 cur.scroll(0, mode='absolute') # cur.fetchall返回的是一个元组; print("查找1所有记录", cur.fetchall())
cur.scroll(-10, mode='relative') print("查找2所有记录", cur.fetchall())
## 获取表的字段名和信息:
res = cur.execute('select * from myusers;') # 显示每列的详细信息 desc= cur.description print("表的描述", desc) # 获取表头 print("表头", ','.join([item[0] for item in desc]))
## 应用---银行转账操作
"""
转账方法:
# 1. source_accid帐号是否存在;
# 2. target_accid帐号是否存在;
# 3. 是否有足够的钱
# 4. source_accid扣钱
# 5. target_acci加钱
# 6. 提交对数据库的操作
:param source_accid: 源帐号id
:param target_accid: 目标帐号id
:param money: 转账金额
:return: bool
"""
import pymysql
class TransferMoney(object):
def __init__(self, conn):
self.conn = conn
self.cursor = conn.cursor()
def transfer(self, source_accid, target_accid, money):
self.check_account(source_accid)
self.check_account(target_accid)
self.enough_money(source_accid, money)
try:
self.reduce_money(source_accid, money)
self.add_money(target_accid, money)
self.conn.commit()
except Exception as e:
# 撤销对于数据库的更改操作, 回滚
self.conn.rollback()
else:
print("%s to %s 转账%s成功" % (source_accid, target_accid, money))
def check_account(self, accid):
"""判断帐号是否存在, 传递参数为帐号id"""
select_id = 'select * from bank where accid="%s"' % (accid)
res = self.cursor.execute(select_id)
if res == 1:
return True
else:
raise Exception("没有找到账户")
def enough_money(self, accid, money):
"""是否有足够的钱"""
select_money = 'select money from bank where accid="%s"' % (accid)
self.cursor.execute(select_money)
# 获取查询到的金钱数额
acc_money = self.cursor.fetchone()[0]
if acc_money >= money:
return True
else:
raise Exception('没有足够的钱')
def reduce_money(self, accid, money):
try:
update_money = 'update bank set money=money-%s where accid="%s"' % (money, accid)
print("update_money:", update_money)
self.cursor.execute(update_money)
except Exception as e:
print('error', e)
def add_money(self, accid, money):
# 对于accid减少的金额为money
try:
update_money = 'update bank set money=money+%s where accid="%s"' % (money, accid)
print("add_money sql:", update_money)
self.cursor.execute(update_money)
except Exception as e:
print('Error:', e)
def __del__(self):
self.cursor.close()
def create_data():
conn = pymysql.connect(user='hello', password='hello', charset='utf8', db='houzeyu')
cur = conn.cursor()
try:
create_sqli = 'create table bank( accid int PRIMARY KEY, ' \
'name varchar(10), money FLOAT);'
cur.execute(create_sqli)
except Exception as e:
print('error', e)
else:
print('创建表成功')
try:
users = [(610001, 'kobe', 1000), (610002, 'james', 1000), (610003, 'curry', 1000)]
insert = 'insert into bank values (%s,%s,%s)'
cur.executemany(insert, users)
except Exception as e:
print('error', e)
else:
print('初始化数据成功')
cur.close()
conn.close()
create_data()
a = TransferMoney(conn=pymysql.connect(user='hello', password='hello', charset='utf8', autocommit=True, db='houzeyu'))
a.transfer(610001, 610002, 200)
###################################
推荐阅读
-
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
-
MySQL数据库在主流操作系统下的同步_MySQL
-
ubuntu linux下使用Qt连接MySQL数据库的方法
-
ubuntu linux下使用Qt连接MySQL数据库的方法
-
Python的SQLalchemy模块连接与操作MySQL的基础示例
-
Python的SQLalchemy模块连接与操作MySQL的基础示例
-
Mac环境下php操作mysql数据库的方法分享
-
MAC下MYSQL5.7.17连接不上的问题及解决办法
-
Python连接mysql数据库及python使用mysqldb连接数据库教程
-
python 连接数据库mysql解压版安装配置及遇到问题