當前位置:首頁 » 編程語言 » pythonmysql字典

pythonmysql字典

發布時間: 2023-05-23 05:53:45

python 進行 Oracle 與 Mysql 不同資料庫類型之間的數據 diff


項目工作中,可能會有 A 類型資料庫數據需要遷移到 B 類型的資料庫中的需求。 例如:假設現有一個資料庫的遷移需求,是將 Oracle 資料庫里的數據遷移至 Mysql 資料庫中。 常規的測試方法是人工去抽樣檢測數據進行 diff,因為數據量太大,人工不可能實現全量數據的肉眼 diff。

因此,為提高數據 diff 的正確性以及測試效率,編寫測試腳本進行全量遷移數據的 diff 是十分必要的。以下內容將會著重講解如何使信銀用 Python 編寫腳本來實現 Oracle 與 Mysql 這種不同類型資料庫之間數據的 diff。


1、連接oracle資料庫並獲取要提取的數據,並輸出列表裡面嵌入的字典類型的數據

2、連接mysql資料庫並獲滑閉宴取要提取的數據態態,並輸出列表裡面嵌入的字典類型的數據

3、Oracle 與 Mysql 資料庫進行 diff,直接調用上面兩個方法即可

4、執行後的輸出結果


㈡ python3中,如何把字典中的key和value循環存入MySql資料庫

有些資料庫可以直接存鍵值對,比如redis.
mysql的話可以考慮列表用特殊字元分隔,保存最後的字元串。但損失性能和不符合資料庫範式。

㈢ python怎麼處理mysql dmp文件

在Windows平台上安裝mysql模塊用於Python開發

用python連接mysql的時候,需要用的安裝版本,源碼版本容易有錯誤提示。下邊是打包了32與64版本。
MySQL-python-1.2.3.win32-py2.7.exe
MySQL-python-1.2.3.win-amd64-py2.7.exe
實例 1、取埋罩得 MYSQL 的版本

# -*- coding: UTF-8 -*-
#安裝 MYSQL DB for python
import MySQLdb as mdb
con = None
try:
#連接 mysql 的方法: connect('ip','user','password','dbname')
con = mdb.connect('localhost', 'root','root', 'test');

#所有的查詢,都在連接 con 的一個模塊 cursor 上面運行的
cur = con.cursor()

#執行一個查詢
cur.execute("SELECT VERSION()"敗孫)
#取得上個查詢的結果,是單個結果

data = cur.fetchone()
print "Database version : %s " % data
finally:
if con:
#無論如何,連接記得關閉
con.close()

實例 2、創建一個表並且插入數據

import MySQLdb as mdb
import sys

#將 con 設定為全局連接
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:

#獲取連接的 cursor,只有獲取了 cursor,我們才能進行各種操作
cur = con.cursor()

#創建一個數據表 writers(id,name)
cur.execute("CREATE TABLE IF NOT EXISTS
Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")

#以下插入了 5 條數據
cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")

實例 3、 python 使用 slect 獲取 mysql 的數據並遍歷

import MySQLdb as mdb
import sys

#連接 mysql,獲取連接的對象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:

#仍然是,第一步要獲取連接的 cursor 對象,用於執行查詢
cur = con.cursor()

#類似察液鏈於其他語言的 query 函數, execute 是 python 中的執行查詢函數
cur.execute("SELECT * FROM Writers")

#使用 fetchall 函數,將結果集(多維元組)存入 rows 裡面
rows = cur.fetchall()

#依次遍歷結果集,發現每個元素,就是表中的一條記錄,用一個元組來顯示
for row in rows:
print row

運行結果:

(1L, 『Jack London')
(2L, 『Honore de Balzac')
(3L, 『Lion Feuchtwanger')
(4L, 『Emile Zola')
(5L, 『Truman Capote')
上面的代碼,用來將所有的結果取出,不過列印的時候是每行一個元祖列印,現在我們使用方法,取出其中的單個數據:

import MySQLdb as mdb
import sys

#獲取 mysql 的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test');
with con:
#獲取執行查詢的對象
cur = con.cursor()
#執行那個查詢,這里用的是 select 語句
cur.execute("SELECT * FROM Writers")
#使用 cur.rowcount 獲取結果集的條數
numrows = int(cur.rowcount)
#循環 numrows 次,每次取出一行數據
for i in range(numrows):
#每次取出一行,放到 row 中,這是一個元組(id,name)
row = cur.fetchone()
#直接輸出兩個元素
print row[0], row[1]

運行結果:

1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
實例 4、使用字典 cursor 取得結果集(可以使用表欄位名字訪問值)

import MySQLdb as mdb
import sys
#獲得 mysql 查詢的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#獲取連接上的字典 cursor,注意獲取的方法,
#每一個 cursor 其實都是 cursor 的子類
cur = con.cursor(mdb.cursors.DictCursor)
#執行語句不變
cur.execute("SELECT * FROM Writers")
#獲取數據方法不變
rows = cur.fetchall()
#遍歷數據也不變(比上一個更直接一點)
for row in rows:
#這里,可以使用鍵值對的方法,由鍵名字來獲取數據
print "%s %s" % (row["Id"], row["Name"])

實例 5、獲取單個表的欄位名和信息的方法

import MySQLdb as mdb
import sys
#獲取資料庫的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
#獲取普通的查詢 cursor
cur = con.cursor()
cur.execute("SELECT * FROM Writers")
rows = cur.fetchall()
#獲取連接對象的描述信息
desc = cur.description
print 'cur.description:',desc
#列印表頭,就是欄位名字
print "%s %3s" % (desc[0][0], desc[1][0])
for row in rows:
#列印結果
print "%2s %3s" % row

運行結果:

cur.description: ((『Id', 3, 1, 11, 11, 0, 0), (『Name', 253, 17, 25, 25, 0, 1))
Id Name
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
實例 6、使用 Prepared statements 執行查詢(更安全方便)

import MySQLdb as mdb
import sys

con = mdb.connect('localhost', 'root', 'root', 'test')
with con:
cur = con.cursor()
#我們看到,這里可以通過寫一個可以組裝的 sql 語句來進行
cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Guy de Maupasant", "4"))
#使用 cur.rowcount 獲取影響了多少行
print "Number of rows updated: %d" % cur.rowcount

結果:
Number of rows updated: 1

實例 7、把圖片用二進制存入 MYSQL

有人喜歡把圖片存入 MYSQL(這種做法貌似很少吧),我看大部分的程序,圖片都是存放在伺服器上的文件,資料庫中存的只是圖片的地址而已,不過 MYSQL 是支持把圖片存入資料庫的,也相應的有一個專門的欄位 BLOB (Binary Large Object),即較大的二進制對象欄位,請看如下程序,注意測試圖片自己隨便找一個,地址要正確:
首先,在資料庫中創建一個表,用於存放圖片:

復制代碼代碼如下:

CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);

然後運行如下 PYTHON 代碼進行:

import MySQLdb as mdb
import sys

try:
#用讀文件模式打開圖片
fin = open("../web.jpg")
#將文本讀入 img 對象中
img = fin.read()
#關閉文件
fin.close()
except IOError, e:
#如果出錯,列印錯誤信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)
try:
#鏈接 mysql,獲取對象
conn = mdb.connect(host='localhost',user='root',passwd='root',
db='test')
#獲取執行 cursor
cursor = conn.cursor()
#直接將數據作為字元串,插入資料庫
cursor.execute("INSERT INTO Images SET Data='%s'" %
mdb.escape_string(img))
#提交數據
conn.commit()
#提交之後,再關閉 cursor 和鏈接
cursor.close()
conn.close()
except mdb.Error, e:
#若出現異常,列印信息
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

實例 8、從資料庫中把圖片讀出來

import MySQLdb as mdb
import sys

try:
#連接 mysql,獲取連接的對象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#執行查詢該圖片欄位的 SQL
cursor.execute("SELECT Data FROM Images LIMIT 1")
#使用二進制寫文件的方法,打開一個圖片文件,若不存在則自動創建
fout = open('image.png','wb')
#直接將數據如文件
fout.write(cursor.fetchone()[0])
#關閉寫入的文件
fout.close()
#釋放查詢數據的資源
cursor.close()
conn.close()
except IOError, e:
#捕獲 IO 的異常 ,主要是文件寫入會發生錯誤
print "Error %d: %s" % (e.args[0],e.args[1])
sys.exit(1)

實例 9、使用 Transaction 即事務(手動提交,自動回滾)

import MySQLdb as mdb
import sys

try:
#連接 mysql,獲取連接的對象
conn = mdb.connect('localhost', 'root', 'root', 'test');
cursor = conn.cursor()
#如果某個資料庫支持事務,會自動開啟
#這里用的是 MYSQL,所以會自動開啟事務(若是 MYISM 引擎則不會)
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Leo Tolstoy", "1"))
cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
("Boris Pasternak", "2"))
cursor.execute("UPDATE Writer SET Name = %s WHERE Id = %s",
("Leonid Leonov", "3"))
#事務的特性 1、原子性的手動提交
conn.commit()
cursor.close()
conn.close()
except mdb.Error, e:
#如果出現了錯誤,那麼可以回滾,就是上面的三條語句要麼執行,要麼都不執行
conn.rollback()
print "Error %d: %s" % (e.args[0],e.args[1])

結果:
1、因為不存在 writer 表( SQL 第三條語句),所以出現錯誤:Error 1146: Table 『test.writer' doesn't exist
2、出現錯誤,出發異常處理, 3 條語句的前兩條會自動變成了沒有執行,結果不變
3、如果本代碼放到一個 MyISAM 引擎表,前兩句會執行,第三句不會;如果是 INNDB 引擎,則都不會執行。

㈣ python中 如何將從介面取到的json數據存入mysql資料庫 最好有具體的例子 謝謝

json的數據json.loads進來碰歲以後會變成一個json的對指虧象,你需要自己把python對象中的欄位笑逗睜值取出來,拼成sql語句

你可以把這個過程封裝成一個函數

import json
def save_json(json_str):
obj = json.loads(json_str)

sql = 'insert into tbl values ("%s")' % obj['id'] #這里注意編碼,要轉成資料庫的編碼格式

#blabla

㈤ python向mysql中插入數據提示錯誤

答:資料庫本身是不支持字典類型的(已知的絕大多)
方法有兩種:
1、把字典或者json格式數據作為字元串(string)直接插入、讀取的時候再轉為字典。
2、為了避免某些字元、引號等轉義問題發生、可以使用base64編碼後導入資料庫、讀取時候再用base64解碼。
也可以試試這個:
sql="insertintoaccount·userdata(user、passwd)values(%s、%s)"cursor.execute(sql、(name、passwd-md5))試試這個,
或者:sql="insertintoaccunt.userdata(user.passwd)values(%s%s)"%(name、passwd-md5)
oursor.execute(sql)。

㈥ 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資料庫

#!/usr/bin/python
import MySQLdb
# 打開資料庫連接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
#打開游標
cursor = db.cursor()
# 執行資料庫查詢
cursor.execute("SELECT * from users")
# 獲取結果集的第一行
data = cursor.fetchone()
print "Database version : %s " % data
# 關閉連接
db.close()

㈧ 如何用python讀取mysql的數據,再進行機器學習建模轉化為dateframe嗎然後咋處理

pandas是python環境下最有名的數據統計包,而DataFrame翻譯為數據框,是一種數據組織方式,這么說你可能無法從感性上認識它,舉個例子,你大概用過Excel,而它也是一種數據組織和呈現的方式,簡單說就是表格,而在在pandas中用DataFrame組織數據,如果你不print DataFrame,你看不到這些數據,下面我們來看看DataFrame是如何使用的。
首先是引入pandas和numpy,這是經常配合使用的兩個包,pandas依賴於numpy,引入以後我們可以直接使用np/pd來表示這個兩個模塊
先創建一個時間索引,所謂的索引(index)就是每一行數據的id,可以標識每一行的唯一值
為了快速入門,我們看一下如何創建一個6X4的數據:randn函數用於創建隨機數,參數帶祥表示行數和列數,dates是上一步創建的索引列
我們還可以使用字典來創建數據框,例如創建一個列名為A的數據框,索引是自動創建的整數
這又是一個字典創建DataFrame的例子
假如字典內的數據長度不同,以最長的數據為准,比如B列有4行:
可以使用dtypes來查看各行的數據格式
接著看陪清一下如何查看數據框中的數據,看一下所有的數據
使用head查看前幾行數據(默認是前5行),不過你可以指定前幾行
查看前三行數據
使用tail查看後5行數據
查看數據框的索引
查看列名用columns
查看數據值,用values
查看描述性統計,用describe
使用type看一下輸出的描述性統計是什麼樣的數據類型——DataFrame數據
使用蠢亂搏T來轉置數據,也就是行列轉換
對數據進行排序,用到了sort,參數可以指定根據哪一列數據進行排序。
好了,這篇入門教程到這里,後面還有很多,希望有志同道合的朋友一起交流學習,有什麼說的不對的地方,請批評指正。

㈨ python,從mysql里select出set或者list或者dict

使用pickle模塊肢培罩中序中遲列歷鬧化和反序列化
這有例子:http://blog.163.com/java_jing/blog/static/2973007820100200577343/

熱點內容
微信56g緩存怎麼解決 發布:2024-05-04 14:09:41 瀏覽:705
sqlupdatewhereand 發布:2024-05-04 13:55:47 瀏覽:585
java視頻教程推薦 發布:2024-05-04 13:55:08 瀏覽:85
安卓官服閃耀暖暖怎麼換 發布:2024-05-04 13:46:37 瀏覽:170
我的世界精靈伺服器怎麼抓寵物 發布:2024-05-04 13:28:54 瀏覽:959
編譯androidwebkit 發布:2024-05-04 13:11:37 瀏覽:761
安卓微信流量怎麼控制 發布:2024-05-04 12:47:19 瀏覽:799
mysql主從復制資料庫 發布:2024-05-04 12:37:55 瀏覽:512
開公司人員配置不夠有什麼影響 發布:2024-05-04 12:32:21 瀏覽:435
rust網路編程和ftp 發布:2024-05-04 12:32:21 瀏覽:63