社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python操作Mysql数据库入门——查看和增加记录

Python爱好者社区 • 8 年前 • 1214 次点击  


作者:王大伟

Python爱好者社区唯一小编

博客:https://ask.hellobi.com/blog/wangdawei


点击文末阅读原文报名上图课程


前言

最近学了一下sql,因为做数据分析不会sql真不行。

平时学的都是Python,所以如果要用pandas做数据分析,数据除了导入excel和csv文件,

应该还要会从数据库中导入数据到Python中,于是我进行了以下的学习和探索。

环境

Python 3.X

IDE : juyter notebook

mysql

安装必要的模块

首先安装好

进入:

http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient


找到适合自己的版本

下载到本地(我的下载到e:盘根目录)

然后打开cmd如下图安装


这里推荐本地安装

使用Python连接数据库

import MySQLdb


如果导入模块没报错,恭喜你,安装模块成功了!

conn = MySQLdb.connect(
   host = '127.0.0.1',#本地地址
   user = 'root',#一般默认用户名
   passwd = '********',#本地数据库登录密码
   db = 'test',#数据库名称
   port = 3306,#安装mysql默认的端口号
   charset = 'utf8'#设置数据库统一编码
)

通过connect方法连接本地mysql数据库,这里要注意你要修改的或许是登录密码和数据库名称

创建游标

首先,我们要创建一个游标

cursor = conn.cursor()

什么是游标呢?

游标就相当于一个缓冲区,存放暂时的结果(这是我的理解)

就像去超市买买买,你可能要推一个手推车,这里的手推车就像游标,推着手推车去对应的货架完成挑选操作,而手推车最终会在出超市时候清空。

观察数据库


我本地的数据库test中有个tdb_goods的表

表的内容如上图所示

有商品的id,名称,种类id,品牌id,是否在售和是否下架几个字段

一共有23条记录

获取数据

我们使用select语句可以获取数据

cursor.execute('SELECT * FROM `tdb_goods`;')
data = cursor.fetchone()#取一条数据
print(data)

首先我们用游标的execute方法执行一句sql语句获取tdb_goods中的所有数据

然后使用游标的fetchone方法取出其中一条记录并且展现出来


如上图,我们取出的数据是元组形式

当然,我们应该养成打开后关闭的好习惯,所以,在操作结束,应该断开与数据库的连接

conn.close()

异常处理

当我们在操作时,希望和在mysql数据库中一样,异常时会提示异常信息

那么我们就要加入异常处理模块

try:
   conn = MySQLdb.connect(
       host = '127.0.0.2222',
       user = 'root',
       passwd = '********',
       db = 'test',
       port = 3306,
       charset = 'utf8'
   )
except MySQLdb.Error as e:
   print('Error:%s' % e)


这里异常时,就将异常的信息告知我们了

我们将以上代码整理一下:

import MySQLdb

try:
   conn = MySQLdb.connect(
       host = '127.0.0.1',
       user = 'root',
       passwd = '********',
       db = 'test',
       port = 3306,
       charset = 'utf8'
   )
   
   cursor = conn.cursor()
   cursor.execute('SELECT * FROM `tdb_goods`;')
   data = cursor.fetchone()
   print(data)
   
   conn.close()

except MySQLdb.Error as e:
   print('Error:%s' % e)


当我们将fetchone改成fetchall时候,就是取出所有信息了


使用面向对象编程

如果你熟悉面向对象编程或者看过我写的面向对象编程入门系列(小姐姐系列)

传送门:

Python面向对象编程从零开始(1)——从没对象到有对象

Python面向对象编程从零开始(2)—— 与对象相互了解

Python面向对象编程从零开始(3)—— 小姐姐请客上篇

Python面向对象编程从零开始(4)—— 小姐姐请客下篇

Python面向对象编程从零开始(5)—— 小姐姐要买房

如果你还没接触过面向对象编程,看完以上5篇至少对接下来的内容理解上不存在问题

import MySQLdb

class Mysql(object):
   
   def __init__(self):
       self.connect()
   
   def connect(self):

       try:
           self.conn = MySQLdb.connect(
               host = '127.0.0.1',
               user = 'root',
               passwd = '********',
               db = 'test',
               port = 3306,
               charset = 'utf8'
           )
           
       except MySQLdb.Error as e:
           print('Error:%s' % e)

   def close_conn(self):
       try:
           if self.conn:
               self.conn.close()
       except MySQLdb.Error as e:
           print('Error:%s' % e)    
       
   def get_a(self):
 
       sql = 'select * from `tdb_goods` where `cate_id` = %s;'
       cursor = self.conn.cursor()
       cursor.execute(sql,('1',))
       data = cursor.fetchone()
       print(data)
       cursor.close()
       self.close_conn()
       
def main():
   object = Mysql()
   object.get_a()
   
if __name__ == '__main__':
   main()

注:这里定义了一个类叫Mysql,然后用类创建一个对象名为object,在创建对象的时候,类的初始化时调用连接数据库函数

创建了一个叫object的对象,使用对象的get_a方法从数据库tdb_goods中选出cate_id=1的一条记录,在get_a函数最后位置断开数据库连接

结果如下:


插入记录到数据库

import MySQLdb

class Mysql(object):
   
   def __init__(self):
       self.connect()
   
   def connect(self):

       try:
           self.conn = MySQLdb.connect(
               host = '127.0.0.1',
               user = 'root',
               passwd = '********',
               db = 'test',
               port = 3306,
               charset = 'utf8'
           )
           
       except MySQLdb.Error as e:
           print('Error:%s' % e)

   def close_conn(self):
       try:
           if self.conn:
               self.conn.close()
       except MySQLdb.Error as e:
           print('Error:%s' % e)    
       
   def get_a(self):
 
       sql = 'select * from `tdb_goods` where `cate_id` = %s;'
       cursor = self.conn.cursor()
       cursor.execute(sql,('1',))
       data = cursor.fetchone()
       print(data)
       cursor.close()
       self.close_conn()
   
   def add_a(self):
       sql = "insert into `tdb_goods`(`goods_name`,`cate_id`,`brand_id`,`goods_price`,`is_show`,`is_saleoff`) value (%s,%s,%s,%s,%s,%s);"
       cursor = self.conn.cursor()
       cursor.execute(sql,('伟哥牌notebook','8','1','66666','1','0'))
       cursor.close()
       self.close_conn()
       
def main():
   object = Mysql()
   object.add_a()
   
if __name__ == '__main__':
   main()

注:这里,将一条记录插入了数据库,但是当我执行完这条语句(没报错)

刷新数据库并没有新增一条记录

划重点:在这里,有一个self.conn.commit(),这个叫提交,如果不写这句,就无法将所做修改保存的数据库中

加上这个之后(加在以下两句之间):


可以看到,数据成功写入数据库了~

如果运行代码报错,很可能是你的数据库名和数据库登录密码没有修改~

文中如有错误和叙述不妥之处,望指正。

微课福利:Hellobi live |8月22日,利用 Python 建构金融数据分析平台

查看下图说明免费参加或者点击文末阅读原文参加

关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。


Python爱好者社区


为大家提供与Python相关的最新技术和资讯。

长按指纹 > 识别图中二维码 > 添加关注


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/rFhLlePiIu
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/3116