开发者社区> 科技探索者> 正文

python连接数据库操作MySQL

简介:
+关注继续查看

参考

:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001391435131816c6a377e100ec4d43b3fc9145f3bb8056000


http://www.cnblogs.com/fnng/p/3565912.html



一 模块

  • mysql-connector-python:是MySQL官方的纯Python驱动;

  • MySQL-python:是封装了MySQL C驱动的Python驱动。

可以把两个都装上,使用的时候再决定用哪个:

$ pip install  mysql-connector-python
pip install  MySQL-python

或者 使用yum安装(包名我忘记了 可以是使用yum search mysql去找)

yum install MySQL-python



测试是否按照好的驱动

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
#coding:utf-8
import sys
try:
    import MySQLdb
    print "MySQL python drivier is ok!"
except Exception, e:
    print e
    sys.exit(1)
finally:
    sys.exit(1)


二、数据库中的表

show create table net_data; 可以查看


1
2
3
4
5
6
7
8
9
10
CREATE TABLE `net_data` (
  `_id` int(11) NOT NULL AUTO_INCREMENT,
  `create_date` datetime NOT NULL,
  `province` varchar(64) NOT NULL,
  `city` varchar(64) NOT NULL,
  `net_type` enum('CTC','CNC','CMC','JK'NOT NULL,
  `med` float NOT NULL,
  `loss` float NOT NULL,
  PRIMARY KEY (`_id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;


三  先看插入的实例吧


作用,连接数据库插入一条数据


数据库插入一条数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import MySQLdb
....
....
def insert_into_mysql(info):
    conn= MySQLdb.Connect(
            host='localhost',
            port = 3306,
            user='root',
            passwd='12qwaszx',
            db ='netmap',
            charset='utf8',
            )
    cur = conn.cursor()
    sqli = "insert into net_data (create_date,province,city,net_type,med,loss) values(%s,%s,%s,%s,%s,%s)"
    cur.execute(sqli,(datetime.now(),'上海','上海','CTC','23','0'))
    conn.commit()
    cur.close()
    conn.close()




同时插入多条数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#info type is list 列表
def insert_into_mysql(info):
    conn= MySQLdb.Connect(
            host='localhost',
            port = 3306,
            user='root',
            passwd='12qwaszx',
            db ='netmap',
            charset='utf8',
            )
    cur = conn.cursor()
    sqli = "insert into net_data (create_date,province,city,net_type,med,loss) values(%s,%s,%s,%s,%s,%s)"
    cur.executemany(sqli,(info))
    conn.commit()
    cur.close()
    conn.close()




四、查询实例(完成程序的一部分,完成的是一个统计报表发送的邮件的程序)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python
#encoding=utf8
#by cuizhiliang at 2016-04-29
from datetime import datetime, timedelta
import time
from jinja2 import Template
from sendmail import SendHtmlEmail
import MySQLdb
import os,sys
reload(sys)
sys.setdefaultencoding("utf-8")
g= {
    'host''127.0.0.1',
    'port'3306,
    'user''zabbix',
    'password''zabbix',
    'db':'zabbix',
}
now= datetime.now()
yesterday = now - timedelta(1)
yest_clock = (datetime.now()  -timedelta(1)).strftime('%s')
data = {}
def select_mysql(cmd):
    conn= MySQLdb.Connect(
            host= g['host'],
            port= g['port'],
            user= g['user'],
            passwd= g['password'],
            db =g['db'],
            charset='utf8',
            )
    #print cmd
    cur = conn.cursor()
    cur.execute(cmd)
    res =cur.fetchall()
    return res
#zabbix 上用户列表
def get_user_info():
    cmd="select userid, alias,  name, type  from users;"
    user_list = []
    user_list= list(select_mysql(cmd))
    print user_list
    return user_list
if __name__ == "__main__":
     
    data["user"]= get_user_info()


五、注意: 

1 插入数据库中文乱码  连接数据的字符集 一定要设定

1
charset='utf8'


2 不惯数据库中的字段是datetime类型还是int类型,在插入的时候都传为%s 字符串类型,类型对我们是透明了,模块会自动处理类型! 


3 模块在mac中可能会出错 MySQLdb 


报错:

Traceback (most recent call last):

  File "ping_info.py", line 12, in <module>

    import MySQLdb

  File "/Library/Python/2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>

    import _mysql

ImportError: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

  Referenced from: /Library/Python/2.7/site-packages/_mysql.so

  Reason: image not found



解决方法,因为是C语言开发驱动,所有依赖mysql客户端模块

 sudo find / -name "libmysqlclient.18.dylib"

/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

sudo cp /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib

本文转自残剑博客51CTO博客,原文链接http://blog.51cto.com/cuidehua/1764587如需转载请自行联系原作者


cuizhiliang

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试
mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享出来。   本篇主要描述Qt5.9.3 msvc2017x64 + mysql8.0.16的驱动编译过程。
19 0
Qt+MySql开发笔记:Qt5.9.3的mingw32版本编译MySql8版本驱动并Demo连接数据库测试
之前特定的mysql版本msvc版本已经调通了,但是为了更好的跨平台,所以选择用mingw32版本,于是需要编译mysql驱动的mingw32版本的驱动库,以便提供给qt连接mysql使用。
92 0
Java连接数据库Mysql
Java连接数据库Mysql
51 0
Java连接Access数据库改成MySQL连接数据库
升级诉求:Java连接Access已经算是过时的产物了,一般作为存储服务的应用在Java界比较常用的还是MySQL, 当然还有Oracle数据库。这里要讲的就是连接MySQL数据库了。 就是因为有了SQL标准,各大厂商实现SQL语句基本上大同小异, 所以我们从Access平稳的切换到MySQL数据库也比较方便快捷, 那如何进行Access数据库切换成MySQL数据呢? 下文就是指导手册了,如有问题可以联系作者一同探讨哟~
85 0
远程在线给Ubuntu安装MySQL,Navicat远程连接数据库(详细过程和避坑事项)
这里使用XShell连接服务器,设置主机ip,ssh远程连接即可。如此可用命令去操纵服务器。
294 0
MySQL连接数据库url的参数characterEncoding=UTF-8
最近遇到数据库变更后,向数据库添加记录,中文读取或存入时变为???。本地MySQL数据库的字符集设置的是utf-8,IDE中项目的字符集也是utf-8,所以在切换数据库之前未发现问题。遇到这个问题后排查了一段时间,最后是在MySQL连接数据库url的参数中加了characterEncoding=UTF-8解决了问题。
179 0
MySQL - JDBC 连接数据库 MySQL serverTimezone useSSL 时差问题
MySQL - JDBC 连接数据库 MySQL serverTimezone useSSL 时差问题
121 0
Java——Demo使用GUI并连接数据库实现购买火车票<MySQL>
Java——Demo使用GUI并连接数据库实现购买火车票<MySQL>
187 0
Spring练习,使用Properties类型注入方式,注入MySQL数据库连接的基本信息,然后使用JDBC方式连接数据库,模拟执行业务代码后释放资源,最后在控制台输出打印结果。
Spring练习,使用Properties类型注入方式,注入MySQL数据库连接的基本信息,然后使用JDBC方式连接数据库,模拟执行业务代码后释放资源,最后在控制台输出打印结果。
66 0
Linux安装 MySQL + Navicat连接数据库 + 数据库迁移
Linux安装 MySQL + Navicat连接数据库 + 数据库迁移
116 0
+关注
科技探索者
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像