MySQL学习之连接python(七)

1、开启服务

       以管理员身份运行cmd,然后输入:net start 服务名称

       如:net start mysql

       或:net start mysql76 (具体看服务当初所起的名称)

2、安装PyMySQL

       黑窗口处输入:pip install PyMySQL

       

     注意:若pip出现错误,原因可能是未将pip的路径保存为环境变量,pip的路径为:

     

    将其添加到环境变量,之后关闭dos窗口,再次开启,继续执行:pip install PyMySQL便可。

3、打开python编译器

输入:

import pymysql

# 连接数据库
# 参数1:mysql服务所在主机的ip
# 参数2:用户名
# 参数3:密码
# 参数4:要连接的数据库名
db = pymysql.connect("localhost","root","","test")
# 创建一个cursor对象
cursor = db.cursor()

sql = "select version()" # 此行为要执行的sql语句
# 执行sql语句
cursor.execute(sql)
# 获取返回的信息
data = cursor.fetchone()
print(data)

# 断开
cursor.close()
db.close()

运行结果为(注意需要在执行第一步之后才能正常运行,否则会报错):

   

在dos窗口运行结果为:

   

4、使用ip连接数据库

若用ip连接时出现报错,则可先进行以下修改:

a、使用Navicat打开数据库,找到mysql名称的数据库--->user表--->将User为root其余各项为Y的Host名称改为%--->确认保存。

b、关闭服务:net stop mysql

c、开启服务:net starstart mysql

d、在python中便可使用ip连接服务。

5、创建数据库表

import pymysql

db = pymysql.connect("ip","root","","test")
cursor = db.cursor()

# 检查表是否存在
cursor.execute("drop table if exists bandcard") # 检查表bandcard是否存在,若存在则删除。
# 建表
sql = "create table bandcard(id int auto_increment primary key, money int not null)"
cursor.execute(sql) # 执行

cursor.close()
db.close()

6、数据库插入数据

import pymysql

db = pymysql.connect("ip","root","","test")
cursor = db.cursor()

sql = "insert into bandcard values(0,100)"
try: # 使用此格式的原因在于,插入的数据不一定插入成功
    cursor.execute(sql)
    db.commit() # 目的为将缓存中的数据进行提交,(只要涉及到修改的均需要此语句,如:插入、删除、修改;查询时不需要修改,所以可以不用此句)
except:
    # 如果提交失败,回滚到上一次数据
    db.rollback()
cursor.close()
db.close()

   

sql = "insert into bandcard values(0,300),(0,400),(0,500),(0,600),(0,700)" 插入多条数据

7、数据更新操作

sql = "update bandcard set money=10000 where id=1"

   

8、数据库删除操作

    

sql = "delete from bandcard where money=200"

     

9、数据库查询操作

'''
fetchone()
功能:获取下一个查询结果集,结果集是一个对象
fetchall()   常用
功能:接收全部的返回行
rowcount:是一个只读属性,返回execute()方法影响的行数,即查询多少条数据。
'''

10、封装(为了写代码方便)

import pymysql

class M_mySql():
    def __init__(self,host,user,passwd,dbName):
        self.host = host
        self.user = user
        self.passwd = passwd
        self.dbName = dbName
    def connet(self):
        self.db = pymysql.connect(self.host,self.user,self.passwd,self.dbName)
        self.cursor = self.db.cursor()
    def close(self):
        self.cursor.close()
        self.db.close()
    def get_one(self,sql):
        res = None
        try:
            self.connet()
            self.cursor.execute(sql)
            res = self.cursor.fetchone()
            self.close()
        except:
            print("查询失败")
        return res
    def get_all(self,sql):
        res =()
        try:
            self.connet()
            self.cursor.execute(sql)
            res = self.cursor.fetchall()
            self.close()
        except:
            print("查询失败")
        return res
    def insert(self,sql):
        return self.__edit(sql)
    def update(self,sql):
        return self.__edit(sql)
    def delete(self,sql):
        return self.__edit(sql)
    def __edit(self,sql):
        count = 0
        try:
            self.connet()
            count = self.cursor.execute(sql)
            self.db.commit()
            self.close()
        except:
            print("事物提交失败")
            self.db.rollback()
        return count

  示例查询:

from M_mysql import M_mySql

s = M_mySql("ip","root","","test")

res = s.get_all("select * from bandcard where money>400")
for row in res:
    print("%d--%d"%(row[0],row[1]))

  查询->运行结果 :

   

   示例插入:

from M_mysql import M_mySql

s = M_mySql("ip","root","","test")

res = s.insert("insert into bandcard values(0,909),(0,90909)")
print(res)

   插入-> 运行结果:

 

所遇到的问题:

1、在python下执行(已在上文10中得到解决)

sql = "select * from students_1" # 此行为要执行的sql语句

仅输出第一行数据:

而在dos窗口的输出才是完整的:

 

import pymysql

db = pymysql.connect("localhost","root","hanxia34","world_test")
cursor = db.cursor()
for i in range(30,40):
    # 待执行命令
    sql = 'INSERT INTO world_1(city_id,city_name,date,city_price)VALUES(%d,"日本","2020-02-15",24+%d)'%(i,i)
    # 执行
    cursor.execute(sql)

db.commit() # 提交

data = cursor.fetchone()
print(data)

cursor.close()
db.close()

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HPF4212

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值