日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python数据库操作框架_python bottle 框架操作数据库

發(fā)布時(shí)間:2023/12/19 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据库操作框架_python bottle 框架操作数据库 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python操作mysql數(shù)據(jù)庫用MySQLdb模板,操作postgresql則用psycopg2模塊

安裝MySQLdb(用yum安裝,好像只能與mysql5.1版本配合使用):yum install -y MySQL-python

安裝完后,可用import MySQLdb來使用

下面先簡(jiǎn)介MySQLdb的各種方法

MySQLdb.connect():連接數(shù)據(jù)庫,主要有以下參數(shù):

host:數(shù)據(jù)庫主機(jī)名.默認(rèn)是用本地主機(jī).

user:數(shù)據(jù)庫登陸名.默認(rèn)是當(dāng)前用戶.

passwd:數(shù)據(jù)庫登陸的秘密.默認(rèn)為空.

db:要使用的數(shù)據(jù)庫名.沒有默認(rèn)值.

port:MySQL服務(wù)使用的TCP端口.默認(rèn)是3306.

charset:數(shù)據(jù)庫編碼。

unix_socket:指定mysql的socket路徑,如:unix_socket='/var/mysql/mysql.sock'

創(chuàng)建連接:conn = MySQLdb.connect(user='root',passwd='111111',host='localhost',port=3306, unix_socket='/var/mysql/mysql.sock',charset='utf8')

釋放連接:

釋放連接時(shí)可以應(yīng)用Connection類型對(duì)象的close方法。一般操作完數(shù)據(jù)庫后,需要關(guān)閉連接conn.close()

Cursor(游標(biāo))對(duì)象:

執(zhí)行SQL語句前要獲得一個(gè)指定連接的Cursor對(duì)象,由Cursor對(duì)象執(zhí)行SQL查詢并獲取結(jié)果。

獲得Cursor對(duì)象的方法cur = conn.cursor()

關(guān)閉Cursor:

執(zhí)行SQL結(jié)束后正常要關(guān)閉cursor對(duì)象cur.close()

查詢,插入,更新、刪除操作:

Cursor類型提供了execute方法用于執(zhí)行SQL操作execute(query [,parameters])

query是一個(gè)SQL字符串,parameters是一個(gè)序列或映射,返回值是所影響的記錄數(shù)

查詢

cur.execute("select user,host from mysql.user)

cur.execute("select * from user where name = %s and age = %s", {'name':'drfdai', 'age'30})

這里和字符串的格式化操作類似,但不管參數(shù)是什么類型,都要用'%s'

獲取結(jié)果

獲取結(jié)果集有三種方法,fetchone、fetchall和fetchmany,返回結(jié)果是一個(gè)tuple對(duì)象,tuple中的每一個(gè)元素對(duì)應(yīng)查詢結(jié)果中的一條記錄。

fetchone()返回結(jié)果集中的一條記錄

fetchall()返回結(jié)果集中的所有記錄

fetchmany([N])返回結(jié)果集中N條記錄

插入、更新、刪除

cur.execute("insert user (name, age) values(%s, %s)", ('drfdai', 20))

更新和刪除的操作與更新、刪除類似

除了execute,Cursor類還提供了executemany()方法

executemany(query [, parametersequence])

querey是一個(gè)查詢字符串,parametersequence是一個(gè)參數(shù)序列。這一序列的每一項(xiàng)都是一個(gè)序列或映射象。但executemany只適合插入、更新或刪除操作,而不適用于查詢操作。

cur.execute("insert user(name, age) values(%s, %s)", (('drf', 31), ('jiang', 21)))

提交

mysql現(xiàn)在一般會(huì)默認(rèn)InnoDB作為默認(rèn)引擎,InnoDB引擎執(zhí)行插入、更新、刪除操作后要進(jìn)行提交,才會(huì)更新數(shù)據(jù)庫,因此需要用commit()提交后,才會(huì)生效執(zhí)行的SQL

cur.commit()

回滾

如果在執(zhí)行事務(wù)SQL時(shí),需要回滾的話,就用以下rollback()

rollback()

對(duì)以上操作,進(jìn)行一個(gè)簡(jiǎn)單的函數(shù)封裝,這樣用起來更方便,特別是需要經(jīng)常讀寫數(shù)據(jù)庫的時(shí)候,省事,以下是我封裝好的簡(jiǎn)單函數(shù):#!/usr/bin/env python

#coding=utf-8

import MySQLdb

import logging

#定義錯(cuò)誤日志路徑

error_log = '/'.join((pro_path,'log/task_error.log'))

#定義日志輸出格式

logging.basicConfig(level=logging.ERROR,

format = '%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',

datefmt = '%Y-%m-%d %H:%M:%S',

filename = error_log,

filemode = 'a')

#定義數(shù)據(jù)庫參數(shù)

db_name = 'task'

db_user = 'root'

db_pass = '111111'

db_ip = 'localhost'

db_port = 3306

def writeDb(sql,db_data=()):

"""

連接mysql數(shù)據(jù)庫(寫),并進(jìn)行寫的操作

"""

try:

conn = MySQLdb.connect(db=db_name,user=db_user,passwd=db_pass,host=db_ip,port=int(db_port))

cursor = conn.cursor()

except Exception,e:

print e

logging.error('數(shù)據(jù)庫連接失敗:%s' % e)

return False

try:

cursor.execute(sql,db_data)

conn.commit()

except Exception,e:

conn.rollback()

logging.error('數(shù)據(jù)寫入失敗:%s' % e)

return False

finally:

cursor.close()

conn.close()

return True

def readDb(sql,db_data=()):

"""

連接mysql數(shù)據(jù)庫(從),并進(jìn)行數(shù)據(jù)查詢

"""

try:

conn = MySQLdb.connect(db=db_name,user=db_user,passwd=db_pass,host=db_ip,port=int(db_port))

cursor = conn.cursor()

except Exception,e:

print e

logging.error('數(shù)據(jù)庫連接失敗:%s' % e)

return False

try:

cursor.execute(sql,db_data)

data = [dict((cursor.description[i][0], value) for i, value in enumerate(row)) for row in cursor.fetchall()]

except Exception,e:

logging.error('數(shù)據(jù)執(zhí)行失敗:%s' % e)

return False

finally:

cursor.close()

conn.close()

return data

如果數(shù)據(jù)庫連接失敗,把錯(cuò)誤寫入日志,并返回Flase。

writeDb是用來寫入數(shù)據(jù)的,如果寫入失敗,寫會(huì)把錯(cuò)誤寫入服務(wù)器日志中,然后返回False,如果成功,返回True。

readDb是用來讀取數(shù)據(jù)的,如果讀取失敗,寫會(huì)把錯(cuò)誤寫入服務(wù)器日志中,然后返回False,如果成功,則返回查詢到的數(shù)據(jù),數(shù)據(jù)類型是經(jīng)過處理好的字典格式。

以下是writeDb和readDb使用的方法:@route('/api/getuser',method="POST")

def getuser():

sql = "select * from user;"

userlist = readDb(sql,)

return json.dumps(userlist)

@route('/adduser',method="POST")

def adduser():

name = request.forms.get("name")

age = request.forms.get("age")

sex = request.forms.get("sex")

qq = request.forms.get("qq")

email = request.forms.get("email")

departmentid = request.forms.get("department")

if not name or not age or not sex or not qq or not email or not departmentid:

return '-2'

sql = """

INSERT INTO

user(name,age,sex,qq,email,departmentid)

VALUES(%s,%s,%s,%s,%s,%s)

"""

data = (name,age,sex,qq,email,departmentid)

result = writeDb(sql,data)

if result:

return '0'

else:

return '-1'

總結(jié)

以上是生活随笔為你收集整理的python数据库操作框架_python bottle 框架操作数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。