原生MySQL数据库和Python的存取

最近遇到了很多关于MySQL链接的坑,令小编苦不堪言啊,下面我就和大家一起分享一下小编在学习过程中遇到的神坑。

首先我最初的python环境是2.x,py2.x运用的是mysql-connector-python 2.0.4这个比较老一点的包,当我升级为py3.x的时候,mysql-connector-python 为最新的8.0.1版本,起初并不觉得哪里有问题,写好之后裕兴程序,第一次运行正常,第二次也正常,大概到第四次的时候就会出现系统错误,这令小编很是头大,也没有发现什么地方有错误,就是找不出来,折腾了四五天,发现mysql-connector-python 这个包竟然还是老的,修改之后再次运行,果真,没有错误,这…………小编不想说话,只想静静。。。。。。以后大家也要注意啦!安装包一定要安装对,因为许多新特性你必须了解,小编我还是乖乖地去看别人写的源码吧。。。。

首先我们安装第三方模块(windows下安装,下面的安装有点慢,简易使用国内豆瓣的镜像安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple + 模块名字,这里还使用py2.x环境)

pip install python-mysql

假设有一数据库test1,里面有一张产品信息表products,向其中插入一条产品信息,程序如下:

import MySQLdb

try:

conn=MySQLdb.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')

cs1=conn.cursor()

count=cs1.execute("insert into products(prod_name) values('iphone')")

print count

conn.commit()

cs1.close()

conn.close()

except Exception,e:

print e.message

Connection对象:用于建立与数据库的连接

创建对象:调用connect()方法

conn=connect(参数列表)

参数host:连接的mysql主机,如果本机是'localhost'

参数port:连接的mysql主机的端口,默认是3306

参数db:数据库的名称

参数user:连接的用户名

参数password:连接的密码

参数charset:通信采用的编码方式,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码

对象的方法

close()关闭连接

commit()事务,所以需要提交才会生效

rollback()事务,放弃之前的操作

cursor()返回Cursor对象,用于执行sql语句并获得结果

Cursor对象:执行sql语句

创建对象:调用Connection对象的cursor()方法

cursor1=conn.cursor()

对象的方法

close()关闭

execute(operation [, parameters ])执行语句,返回受影响的行数

fetchone()执行查询语句时,获取查询结果集的第一个行数据,返回一个元组

next()执行查询语句时,获取当前行的下一行

fetchall()执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回

scroll(value[,mode])将行指针移动到某个位置

mode表示移动的方式

mode的默认值为relative,表示基于当前行移动到value,value为正则向下移动,value为负则向上移动

mode的值为absolute,表示基于第一条数据的位置,第一条数据的位置为0

修改/删除:

import MySQLdb

try:

conn=MySQLdb.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')

cs1=conn.cursor()

# 修改

count=cs1.execute("update products set prod_name='xiaomi' where id=6")

# 删除  

count=cs1.execute("delete from products where id=6")

print count

conn.commit()

cs1.close()

conn.close()

except Exception,e:

print e.message

参数化:插入一条数据

import MySQLdb

try:

conn=MySQLdb.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')

cs1=conn.cursor()

prod_name=raw_input("请输入产品名称:")

params=[prod_name]

count=cs1.execute('insert into products(sname) values(%s)',params) print count

conn.commit()

cs1.close()

conn.close()

except Exception,e:

print e.message

查询一条

import MySQLdb

try:

conn=MySQLdb.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')

cs1=conn.cursor()

cur.execute('select * from products where id=2')

result=cur.fetchone() print result

conn.commit()

cs1.close()

conn.close()

except Exception,e:

print e.message

查询多条

import MySQLdb

try:

conn=MySQLdb.connect(host='localhost',port=3306,db='test1',user='root',passwd='mysql',charset='utf8')

cs1=conn.cursor()

cur.execute('select * from prod_name')

result=cur.fetchall() print result

conn.commit()

cs1.close()

conn.close()

except Exception,e:

print e.message

封装:观察前面的程序发现,除了sql语句及参数不同,其它语句都是一样的,可以进行封装然后调用

import MySQLdb

class MysqlHelper():

def __init__(self,host,port,db,user,passwd,charset='utf8'):

self.host=host

self.port=port

self.db=db

self.user=user

self.passwd=passwd

self.charset=charset

def connect(self):

self.conn=MySQLdb.connect(host=self.host,port=self.port,db=self.db,user=self.user,passwd=self.passwd,charset=self.charset)

self.cursor=self.conn.cursor()

def close(self):

self.cursor.close()

self.conn.close()

def get_one(self,sql,params=()):

result=None

try:

self.connect()

self.cursor.execute(sql, params)

result = self.cursor.fetchone()

self.close()

except Exception, e:

print e.message

return result

def get_all(self,sql,params=()):

list=()

try:

self.connect()

self.cursor.execute(sql,params)

list=self.cursor.fetchall()

self.close()

except Exception,e:

print e.message

return list

def insert(self,sql,params=()):

return self.__edit(sql,params)

def update(self, sql, params=()):

return self.__edit(sql, params)

def delete(self, sql, params=()):

return self.__edit(sql, params)

def __edit(self,sql,params):

count=0

try:

self.connect()

count=self.cursor.execute(sql,params)

self.conn.commit()

self.close()

except Exception,e:

print e.message

return count

保存为MysqlHelper.py文件。调用类添加

from MysqlHelper import *

sql='insert intoproducts(prod_name,price) values(%s,%s)'prod_name=raw_input("请输入产品名称:")

price=raw_input("请输入单价:")

params=[prod_name,price]

mysqlHelper=MysqlHelper('localhost',3306,'test1','root','mysql')

count=mysqlHelper.insert(sql,params)if count==1: print 'ok'else: print 'error'

调用类查询查询

from MysqlHelper import *

sql='select prod_name,price from products order by id '

helper=MysqlHelper('localhost',3306,'test1','root','mysql')

one=helper.get_one(sql)print one

展开阅读全文

页面更新:2024-03-12

标签:数据库   产品名称   产品信息   语句   模块   对象   错误   位置   参数   主机   事务   发现   程序   方法   数据   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top