關於python中mysql使用的信息

本文目錄一覽:

Python3 MySQL executemany的使用?

題主你好,

從你的代碼來說, 你的問題出在對executemany(sql, data)這個方法的邏輯沒弄明白.

咱們對比一下execute(sql)和executemany(sql, data), 這裡假設sql執行的是插入操作:

前者是執行單條操作,要插入的數據是寫死在sql這個字符串中的;

後者是批量執行插入操作.關鍵的地方在於sql參數中留出格式化字符, 而數據是從data中取,這麼說不好理解,看例子吧:

sql改為:

sql = “INSERT INTO bbb(nu1, nu2, nu3) VALUES (%s, %s, %s)”

注意和你的對比一下:

sql = “INSERT INTO bbb(nu1, nu2, nu3) VALUES (%s, %s, %s)” % (aa,bb,cc)

—–

關鍵是data參數,有兩種寫法,一種是序列內嵌, 一種是字典:

序列內嵌(外層必須是列表, 內層元素是列表或元組)

data=[[1,2,3],[4,5,6],[7,8,9]]

data=[(1,2,3),(4,5,6),(7,8,9)]

字典:

使用字典時,sql也要相應的改一下:

sql = “INSERT INTO bbb(nu1, nu2, nu3) VALUES (%(nu1)s, %(nu2)s, %(nu3)s)”

data參數外層還是一個列表, 內層元素是一個個的字典,即一個字典表示一條將要被插入的數據:

data = [ { ‘nu1’:1, ‘nu2’:2, ‘nu3’:3 }, { ‘nu1’:1, ‘nu2’:2, ‘nu3’:3 } ]

—–

再說下最終的邏輯:

序列內嵌法:

1.可以使用for循環先得到一個外層是列表,內層元素是列表或元組的這的一個列表:

ll= []

for i in itertools.permutations(range(1,8),3):

ll.append(i)

2.然後再構建sql語句:

sql = “INSERT INTO bbb(nu1, nu2, nu3) VALUES (%s, %s, %s)”

3.調用executemany():

cursor.executemany(sql,ll)

4.最後調用commit(),提交給數據庫執行:

yydd.commit()

—–

字典法的邏輯:

1.使用for循環構建一個元素是字典的列表:

ll= []

for i in itertools.permutations(range(1,8),3):

ll.append({‘nu1’:i[0], ‘nu2’:i[1], ‘nu3’:i[2]})

2.構建sql語句:

sql = “INSERT INTO bbb(nu1, nu2, nu3) VALUES (%(nu1)s, %(nu2)s, %(nu3)s)”

3,4步同序列內嵌法中的描述.

=====

希望可以幫到題主, 歡迎追問

如何使用python連接mysql數據庫

在 Python 語言環境下我們這樣連接數據庫。

In [1]: from mysql import connector

In [2]: cnx = connector.connect(host=”172.16.192.100″,port=3306,user=”appuser”,password=”xxxxxx”)

但是連接數據庫的背後發生了什麼呢?

答案

當我們通過驅動程序(mysql-connector-python,pymysql)連接 MySQL 服務端的時候,就是把連接參數傳遞給驅動程序,驅動程序再根據參數會發起到 MySQL 服務端的 TCP 連接。當 TCP 連接建立之後驅動程序與服務端之間會按特定的格式和次序交換數據包,數據包的格式和發送次序由 MySQL 協議 規定。MySQL 協議:整個連接的過程中 MySQL 服務端與驅動程序之間,按如下的次序發送了這些包。

MySQL 服務端向客戶端發送一個握手包,包里記錄了 MySQL-Server 的版本,默認的授權插件,密碼鹽值(auth-data)。

2. MySQL 客戶端發出 ssl 連接請求包(如果有必要的話)。

3. MySQL 客戶端發出握手包的響應包,這個包時記錄了用戶名,密碼加密後的串,客戶端屬性,等等其它信息。

4. MySQL 服務端發出響應包,這個包里記錄了登錄是否成功,如果沒有成功也會給出錯誤信息。

python怎麼操作mysql

我採用的是MySQLdb操作的MYSQL數據庫。先來一個簡單的例子吧:

import MySQLdb

try:

conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,db=’test’,port=3306)

cur=conn.cursor()

cur.execute(‘select * from user’)

cur.close()

conn.close()

except MySQLdb.Error,e:

print “Mysql Error %d: %s” % (e.args[0], e.args[1])

請注意修改你的數據庫,主機名,用戶名,密碼。

下面來大致演示一下插入數據,批量插入數據,更新數據的例子吧:

import MySQLdb

try:

conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,port=3306)

cur=conn.cursor()

cur.execute(‘create database if not exists python’)

conn.select_db(‘python’)

cur.execute(‘create table test(id int,info varchar(20))’)

value=[1,’hi rollen’]

cur.execute(‘insert into test values(%s,%s)’,value)

values=[]

for i in range(20):

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()

cur.close()

conn.close()

except MySQLdb.Error,e:

print “Mysql Error %d: %s” % (e.args[0], e.args[1])

請注意一定要有conn.commit()這句來提交事務,要不然不能真正的插入數據。

運行之後我的MySQL數據庫的結果就不上圖了。

import MySQLdb

try:

conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’root’,port=3306)

cur=conn.cursor()

conn.select_db(‘python’)

count=cur.execute(‘select * from test’)

print ‘there has %s rows record’ % count

result=cur.fetchone()

print result

print ‘ID: %s info %s’ % result

results=cur.fetchmany(5)

for r in results:

print r

print ‘==’*10

cur.scroll(0,mode=’absolute’)

results=cur.fetchall()

for r in results:

print r[1]

conn.commit()

cur.close()

conn.close()

except MySQLdb.Error,e:

print “Mysql Error %d: %s” % (e.args[0], e.args[1])

運行結果就不貼了,太長了。

查詢後中文會正確顯示,但在數據庫中卻是亂碼的。經過我從網上查找,發現用一個屬性有可搞定:

在Python代碼

conn = MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’, db=’python’) 中加一個屬性:

改為:

conn = MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’, db=’python’,charset=’utf8′)

charset是要跟你數據庫的編碼一樣,如果是數據庫是gb2312 ,則寫charset=’gb2312’。

下面貼一下常用的函數:

然後,這個連接對象也提供了對事務操作的支持,標準的方法

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條.

參考資料:

MySQLdb『s user guide

package MySQLdb

如何使用Python3.4連接MySQL

序號    描述  

1    去github上下載pymysql的安裝包pymysql  

2    解壓到某個盤符下  

3    打開cmd窗口(win環境下),進入pymysql的根目錄下執行命令,python setup.py install  

4    在程序里,導入pymysql  

5    開始連接數據庫  

數據庫操作的API文檔連接: 

代碼如下: 

Python代碼

__author__ = ‘qindongliang’

#導入pymysql的包

import pymysql

try:

#獲取一個數據庫連接,注意如果是UTF-8類型的,需要制定數據庫

conn=pymysql.connect(host=’localhost’,user=’root’,passwd=’qin’,db=’person’,port=3306,charset=’utf8′)

cur=conn.cursor()#獲取一個游標

cur.execute(‘select * from person’)

data=cur.fetchall()

for d in data :

#注意int類型需要使用str函數轉義

print(“ID: “+str(d[0])+’  名字: ‘+d[1]+”  性別: “+d[2])

cur.close()#關閉游標

conn.close()#釋放數據庫資源

except  Exception :print(“發生異常”)

結果如下: 

Java代碼

D:\python\python.exe D:/pythonide/pythonprojectworkspace/python/mysql.py

ID: 1  名字: 秦天  性別: 男

ID: 2  名字: 王晶  性別: 女

Process finished with exit code 0  

原文  

補充說明:

mysqldb作為python連接mysql數據庫的工具,但是mysqldb目前支撐的版本較低,安裝失敗。所以才嘗試pymysql,這個比較簡單易用

軟件下載地址:

python3.2.5:

pymysql3.0.5:

mysql:(為了方便安裝,我這裡選擇phpstudy)

1、python安裝目錄設定為d:/python32

2、pymysql安裝方法為:解壓下載的文件,在cmd中運行: python setup.py install。

檢驗安裝安裝是否成功的方法:import pymysql  。  如果不報錯 說明安裝成功。

3、mysql安裝目錄為D:/phpStudy/MySQL。為避免更多配置問題,可在啟動phpstudy後,將其設為系統服務

4、基本操作:

(1)導入pymysql: import pymysql

(2)連接數據庫: conn=pymysql.connect(host=’localhost’,user=’root’,passwd=’root’,db=’ere’,charset=’utf8′)    務必注意各等號前面的內容!charset參數可避免中文亂碼

(3)獲取操作游標:cur=conn.cursor()

(4)執行sql語句,插入記錄:sta=cur.execute(“insert 語句”)  執行成功後sta值為1。更新、刪除語句與此類似。

(5)執行sql語句,查詢記錄:cur.execute(“select語句”) 執行成功後cur變量中保存了查詢結果記錄集,然後再用循環打印結果:

for each in cur:

print(each[1].decode(‘utf-8’))     # each[1] 表示當前游標所在行的的第2列值,如果是中文則需要處理編碼

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/238674.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:12
下一篇 2024-12-12 12:12

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論