Python操作MYSQL数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
一、安装MySQLdb 
    MySQLdb is an interface to the popular MySQL database server for Python. The design goals are 
        1. Compliance with Python database API version 2.0(兼容python 数据库API2.0接口) 
        2. Thread-safety(线程安全) 
        3. Thread-friendliness (threads will not block each other) (线程友好,线程间不会相互阻塞) 

   下载地址:(可以根据需要下载window 或linux版本的MySQLdb)

   https://pypi.python.org/pypi/MySQL-python/1.2.5

        如果是windows的版本,直接运行,一路next安装即可。 
        如果是linux版本,则安装步骤如下: 详细可参与安装包中的INSTALL文件 
            $ tar xfz MySQL-python-1.2.1.tar.gz 
            $ cd MySQL-python-1.2.1 
            $ # edit site.cfg if necessary 
            $ python setup.py build 
            $ sudo python setup.py install # or su first 

二、代码示例:

#!/usr/bin/python
# encoding=utf-8
# Filename: mysqltest

import datetime
import MySQLdb as dbi

try:

    conn=dbi.connect(host="172.168.29.250",user='root',passwd='root',db='test',port=3306,charset='utf8')
    cur=conn.cursor()
    
    cur.execute("insert into test(id,name)values(5,'你好呀')")
    conn.commit()
    
    print "获取数据"
    count=cur.execute('select * from test')
    
    print "总记录条数%d" % count
    
    result=cur.fetchone()
    print "id:%d,name:%s" % result 
    
    results=cur.fetchmany(2)
    for r in results:
        print "id:%d,name:%s" % r
    print "------------" 
       
    results=cur.fetchall()
    for r in results:
        print "id:%d,name:%s" % r
    print "------------" 
        
    cur.scroll(0,mode='absolute')
    result=cur.fetchone()
    print "id:%d,name:%s" % result 
    
    print "------------"  
    print "创建数据库表并插入数据:"
 #   cur.execute('create database if not exists python')
    conn.select_db('python')
 #   cur.execute('create table if not exists test (id int,info varchar(20))')
     
    value=[1,'hi rollen']
    cur.execute('insert into test values(%s,%s)',value)    
    values=[]
    print datetime.datetime.now()
    for i in range(10000):
        values.append((i,'hi rollen'+str(i)))    
#     cur.executemany('insert into test values(%s,%s)',values)
#     cur.execute('update test set info="I am rollen" where id=3')
#  
#     conn.commit()
    print datetime.datetime.now()
    print '请注意一定要有conn.commit()这句来提交事务,要不然不能真正的插入数据'
       
    cur.close()
    conn.close()
except dbi.Error,e:
    print 'Mysql error %d:%s' %(e.args[0],e.args[1])

三、解决入库或显示中文乱码的问题

    1.设置python默认的编码

       在D:\Program\Python27\Lib\site-packages目录下,创建sitecustomize.py文件,内容如下:

import sys
sys.setdefaultencoding('utf-8')

      python启动时,会自动加载sys模块并设置默认编码为utf-8    

 2.设置MYSQL的数据库编码为utf8

        将default_character-set、character-set-server的值设置为utf8

[client]
port            = 3306
socket          = /data/mysqldata/mysql/mysql.sock
default_character-set=utf8

[mysqld]
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
lower_case_table_names=1
socket          = /data/mysqldata/mysql/mysql.sock
datadir = /data/mysqldata/mysql

character-set-server = utf8

    3.将py文件的编码设置为utf-8,并用utf-8进行保存

       # encoding=utf-8

    4.创建MYSQL数据库连接时,增加charset参数   conn=dbi.connect(host="172.168.29.250",user='root',passwd='root',db='test',port=3306,charset='utf8')

四、常用函数

    这个连接对象也提供了对事务操作的支持,标准的方法

   commit() 提交
   rollback() 回滚

   cursor用来执行命令的方法:
   callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
   execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
   executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
   nextset(self):移动到下一个结果集

   cursor用来接收返回值的方法:
   fetchall(self):接收全部的返回结果行.
   fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
   fetchone(self):返回一条结果行.
   scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.

五、参考资料

    http://mysql-python.sourceforge.net/MySQLdb.html

   http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb-module.html



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
137 68
|
29天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
198 15
|
3月前
|
关系型数据库 MySQL 数据处理
探索Python中的异步编程:从asyncio到异步数据库操作
在这个快节奏的技术世界里,效率和性能是关键。本文将带你深入Python的异步编程世界,从基础的asyncio库开始,逐步探索到异步数据库操作的高级应用。我们将一起揭开异步编程的神秘面纱,探索它如何帮助我们提升应用程序的性能和响应速度。
|
3月前
|
存储 缓存 Shell
你知道 Python 其实自带了小型数据库吗
你知道 Python 其实自带了小型数据库吗
29 2
你知道 Python 其实自带了小型数据库吗
|
3月前
|
Web App开发 SQL 数据库
使用 Python 解析火狐浏览器的 SQLite3 数据库
本文介绍如何使用 Python 解析火狐浏览器的 SQLite3 数据库,包括书签、历史记录和下载记录等。通过安装 Python 和 SQLite3,定位火狐数据库文件路径,编写 Python 脚本连接数据库并执行 SQL 查询,最终输出最近访问的网站历史记录。
52 4
|
3月前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接22.bijius.com
自动化数据预处理:使用Python库(如Pandas)自动清洗、转换和准备数据,为机器学习模型提供高质量输入。 实时数据处理:集成Apache Kafka或Amazon Kinesis等流处理系统,实现实时数据更新和分析。
|
3月前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
76 1
|
3月前
|
存储 关系型数据库 数据库
轻量级数据库的利器:Python 及其内置 SQLite 简介
轻量级数据库的利器:Python 及其内置 SQLite 简介
78 3
|
3月前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
3月前
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作