pythonodbc連接
1、首先下載mysql 資料庫,我安裝的是mysql5.1版本,直接安裝就行,但是如果以後你想在資料庫里顯示中文的話,要把字元集設置為gb2312
2、配置數據源odbc。 mysql-connector-odbc-3.51.20-win32.exe(這是mysql數據源dobc安裝程序),配置odbc過程可以參考 http://jingyan..com/article/8065f87f38b31423312498e4.html
3、安裝mysql管理工具,Navicat for MySQL,打開navicat 後要連接資料庫,具體做法是:在navicat中新建連接,將常規設置填好,如果是訪問本地資料庫,主機名或iP地址可填寫:localhost 或127.0.0.1 有時候只有填其中一個好使另一個則不好使,(筆者這里沒仔細研究)注意!Navicat for MySQL資料庫連接之前要開啟mysql資料庫(服務)...。
4、在navicat中新建的連接中就可以連接mysql資料庫了
5、現在可以導入外部資料庫表,或者自己建立表了,這里談一下筆者在導入外部表時遇到的問題,首先是字元編碼的問題,在mysql安裝的過程中雖然字元編碼設置為gb2312但是在navicat中帶有中文的數據表表(比如excel表)還是無法導入進navicat的資料庫表中,那是因為雖然在mysql裡面設置了字元編碼但是在navicat中沒有設置字元編碼為gb2312,需要在navicat中右鍵資料庫,選擇資料庫屬性把裡面的字元編碼設置成為gb2312方可!
6、至於導入表可以右鍵資料庫中的表選擇導入向導,很容易操作,導出的問題此處不介紹。
7、到現在為止數據的搭建已經結束。
這是我自己總結過的 很好用的 希望採納
② python 怎麼調用odbc
入門
連接到資料庫
調用connect方法並傳入ODBC連接字元串,其會返回一個connect對象。通過connect對象,調用cursor()方法,可以獲取一個游標cursor。如下代碼示例:
import pyodbc
#連接示例: Windows系統, 非DSN方式, 使用微軟 SQL Server 資料庫驅動
cnxn =pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass')
#連接示例: Linux系統, 非DSN方式, 使用FreeTDS驅動
cnxn =pyodbc.connect('DRIVER={FreeTDS};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass;TDS_Version=7.0')
#連接示例:使用DSN方式
cnxn = pyodbc.connect('DSN=test;PWD=password')
# 打開游標
cursor =cnxn.cursor()
以上示例只是標准示例,具體的ODBC連接字元串以你自己使用的驅動為准。
查詢一些數據
所有SQL語句都使用Cursor.execute()方法執行。比如select語句會返回一些結果行,你可以使用游標(Cursor)相關的函數功能(fetchone,fetchall,fetchmany)對結果進行檢索。
Cursor.fetchone 用於返回一個單行( Row)對象:
cursor.execute("selectuser_id, user_name from users")
row =cursor.fetchone()
if row:
print(row)
Row 對象是類似一個python元組(tuples),不過也可以通過列名稱來訪問,例如:
cursor.execute("selectuser_id, user_name from users")
row =cursor.fetchone()
print('name:',row[1]) # 使用列索引號來訪問數據
print('name:',row.user_name) # 或者直接使用列名來訪問數據
當所有行都已被檢索,則fetchone返回None.
while 1:
row = cursor.fetchone()
if not row:
break
print('id:', row.user_id)
Cursor.fetchall方法返回所有剩餘行並存儲於一個列表中。如果沒有行,則返回一個空列表。(注意:如果有很多行,會造成大量內存佔用。Fetchall會一次性將所有數據查詢到本地,然後再遍歷)
cursor.execute("selectuser_id, user_name from users")
rows = cursor.fetchall()
for row in rows:
print(row.user_id, row.user_name)
如果並不在意數據處理時間,可以使用游標本身作為一個迭代器,逐行迭代。這樣可以節省大量的內存開銷,但是由於和數據來回進行通信,速度會相對較慢:
cursor.execute("selectuser_id, user_name from users"):
for row in cursor:
print(row.user_id, row.user_name)
由於Cursor.execute總是返回遊標(cursor), 所以也可以簡寫成:
for row incursor.execute("select user_id, user_name from users"):
print(row.user_id, row.user_name)
我們可以在execut中使用」」」三重引號,來應用多行SQL字元串。這樣sql的可讀性大大增強。這是python特有的特性:
cursor.execute(
"""
select user_id, user_name
from users
where last_logon < '2001-01-01'
and bill_overe = 1
""")
SQL參數
ODBC支持使用問號作為SQL的查詢參數佔位符。可以在execute方法的SQL參數之後,提供SQL參數佔位符的值:
cursor.execute(
"""
select user_id, user_name
from users
where last_logon < ?
and bill_overe = ?
""", '2001-01-01', 1)
這樣做可以防止SQL注入攻擊,提高安全性。如果使用不同的參數反復執行相同的SQL它效率會更高,這種情況下該SQL將只預裝(prepared )一次。(pyodbc只保留最後一條編寫的語句,所以如果程序在語句之間進行切換,每次都會預裝,造成多次預裝。)
Python的DB API指定參數應以序列(sequence)對象傳遞,所以pyodbc也支持這種方式:
cursor.execute(
"""
select user_id, user_name
from users
where last_logon < ?
and bill_overe = ?
""", ['2001-01-01', 1])
插入數據
插入數據使用相同的函數 - 通過傳入insert SQL和相關佔位參數執行插入數據:
cursor.execute("insertinto procts(id, name) values ('pyodbc', 'awesome library')")
cnxn.commit()
cursor.execute("insertinto procts(id, name) values (?, ?)", 'pyodbc', 'awesome library')
cnxn.commit()
注意:調用cnxn.commit()。發成錯誤可以回滾。具體需要看資料庫特性支持情況。如果數據發生改變,最好進行commit。如果不提交,則在連接中斷時,所有數據會發生回滾。
更新和刪除數據
更新和刪除工作以同樣的方式:通過特定的SQL來執行。通常我們都想知道更新和刪除的時候有多少條記錄受到影響,可以使用Cursor.rowcount來獲取值:
cursor.execute("deletefrom procts where id <> ?", 'pyodbc')
print('Deleted {}inferior procts'.format(cursor.rowcount))
cnxn.commit()
由於execute 總是返回遊標(允許你調用鏈或迭代器使用),有時我們直接這樣簡寫:
deleted =cursor.execute("delete from procts where id <> 'pyodbc'").rowcount
cnxn.commit()
注意一定要調用commit。否則連接中斷時會造成改動回滾。
技巧和竅門
引號
於單引號SQL是有效的,當值需要使用單引號時,使用用雙引號包圍的SQL:
cursor.execute("deletefrom procts where id <> 'pyodbc'")
如果使用三重引號, 我們可以這樣使用單引號:
cursor.execute(
"""
delete
from procts
where id <> 'pyodbc'
""")
列名稱
Microsoft SQLServer之類的一些資料庫不會產生計算列的列名,在這種情況下,需要通過索引來訪問列。我們也可以使用sql列別名的方式,為計算列指定引用名稱:
row =cursor.execute("select count(*) as user_count fromusers").fetchone()
print('{}users'.format(row.user_count)
當然也可以直接使用列索引來訪問列值:
count =cursor.execute("select count(*) from users").fetchone()[0]
print('{}users'.format(count)
注意,上例的首列不能是Null。否則fetchone方法將返回None並且會報NoneType不支持索引的錯誤。如果有一個默認值,經常可以是ISNULL或合並:
maxid =cursor.execute("select coalesce(max(id), 0) fromusers").fetchone()[0]
自動清理
連接(默認)在一個事務中。如果一個連接關閉前沒有提交,則會進行當前事務回滾。很少需要finally或except 語句來執行人為的清理操作,程序會自動清理。
例如,如果下列執行過程中任何一條SQL語句出現異常,都將引發導致這兩個游標執行失效。從而保證原子性,要麼所有數據都插入發生,要麼所有數據都不插入。不需要人為編寫清理代碼。
cnxn =pyodbc.connect(...)
cursor = cnxn.cursor()
cursor.execute("insertinto t(col) values (1)")
cursor.execute("insertinto t(col) values (2)")
cnxn.commit()
③ 電腦如何建立數據源
在電腦上建立數據源。如果我們若要創建資料庫的話,那麼必須要確定好資料庫的名稱,所有者,大小以及存儲數據的文件文件組成的,創建資料庫的時候感覺付出與起來最大數據量,因創建盡可能大的數據文件,我們在啟動這個對象時候,在對象資源管理器中的資料庫節點上右擊,然後,就可以進行創建了。那麼現在我們就來講解一下吧。
知識點①:首先我們要啟動一個對象,然後在對象資源管理器窗口中,打開資料庫的節點上又記,然後選擇快捷菜單中的新建資料庫命令。
知識點②:第二步在彈出了新建資料庫的對話框的時候,我們在常規的數據頁中,點開資料庫名稱文荒,然後輸入要創建資料庫的名稱,其中,在這個資料庫文件中都有兩個名稱,邏輯文件名以及物理文件名,那麼講解一下邏輯文件名是什麼,邏輯文件名是所有的語句中引用物理文件時所使用到的名稱,邏輯文件名必須要符合這個標志的規則,每一個資料庫的邏輯文件名只有一個,物理文件名是包括了目錄路徑的物理文件,一些,通過,資料庫中至少包含一個主數據文件和一個事務文件,它的存儲路徑和文件名都可以再進行修改,當然也可以利用添加按鈕或者添加多個文件。
知識點③:第三步在常規的數據頁中的數據文件初始大小中可以設置文件的初始大小,單擊,自動增長方式後的按鈕就可以設置自動增長方式和最大文件大小,單擊路徑後的按鈕可以設置文件的存放路徑。
知識點④:第四步在選項數據頁中設置好資料庫的屬性選項,在文件組數據頁中增加和刪除文件名,在對象資源管理窗口中展開資料庫就可以看到新建的資料庫了。
④ python如何訪問資料庫
1.背景:
python提供了很多資料庫介面, 常用的資料庫有 MS SQL Server /mysql /oracle 等。
打開鏈接 https://wiki.python.org/moin/DatabaseInterfaces
是python 關於資料庫介面的一個總結 , 可以看到python支持的訪問的資料庫系統。
2.模塊:
python 主要是通過模塊和資料庫連接的。
2.1 安裝模塊:
如果使用anconda,本身就會集合很多模塊,不需要手動安裝。如果用pycharm就要手動安裝模塊。
安裝模塊流程:
下載模塊擴展包放到路徑下——>cmd找到相應路徑——> pip install +擴展包名字
下面列舉一些常用連接資料庫的模塊:pymssql / sqlite3/ PyMySQL/pyodbc/odbc/adodbapi
不同模塊連接的資料庫不同, 支持的版本系統有的也不一樣。但是大體用法都是相近的, 因為有DB-API
相關推薦:《Python教程》
3.Python DB-API
3.1背景:
在沒有DB-API 之前, 不同資料庫有不同的資料庫介面程序, 這就導致python 訪問 database 的介面程序非常混亂。如果我們學習了python 訪問 mysql 的介面程序, 然後要切換到另一個資料庫上, 我們還要在學習另外一個資料庫的介面程序。python DB-API就是為了解決介面程序混亂而生成的。有了DB-API, 在不同資料庫上移植代碼就變得簡單的多了。
3.2Python DB-API:
Python 定義了一套操作資料庫的 DB-API 介面,它是一個規范,定義了一系列必須的對象和資料庫存取方式,以便為不同的底層資料庫系統提供一致的訪問介面
這個鏈接就是python 官方給定的 DB-API 的說明 https://www.python.org/dev/peps/pep-0249/
3.3 Python DB--API的內容:
連接對象:
?Connect()創建連接:host/server /user/password/db connect方法生成一個connect對象, 我們通過這個對象來訪問資料庫。符合標準的模塊都會實現connect方法。
?close():關閉連接
?commit():提交當前事務。做出某些更改後確保已經進行了提交,這樣才可以將這些修改真正地保存到database中
?rollback() 回滾上一次調用 commit()以來對資料庫所做的更改
?cursor():創建游標。系統為用戶開通的一個數據緩沖區,用於存放SQL語句執行結果。cursor游標是有狀態的,它可以記錄當前已經取到結果的第幾個記錄了,因此,一般你只可以遍歷結果集一次。在上面的情況下,如果執行fetchone()會返回為空。這一點在測試時需要注意
游標對象:
?Execute()執行一個資料庫查詢或命令。 execute 執行sql 語句之後運行的結果不會直接output 出來 , 而是放到了一個緩存區, 要用 fetch語句+print 可以查詢sql運行的結果
?fetchone ()得到結果集的下一行
?fetchmany(size)得到結果集的下幾行
?fetchall()返回結果集中剩下的所有行
?rowcount 返回影響的行數
?Close()關閉游標對象
3.4Python DB--API的工作原理及流程:
如圖所示如果把python 和資料庫比作兩個不同的地點, connection 就是路, 能連接python和database。cursor就像在路上行駛的小貨車, 可以用於執行sql 語句, 以及存儲sql 運行的結果。
流程:
4.MS SQL Server 示例:
4.1 導入模塊、創建連接:
4.2 創建游標: 游標創建之後就可以對資料庫進行查詢更改了!
4.3對數據進行操作(創建表、插入行、更新數據、增加列、刪除行、列、表):
4.4 查詢 獲取行:
5.其他:
使用游標的時候要注意, 每次連接只能有一個游標查詢處於活躍狀態。 code演示:
execute()循環和 executemany() 插入100000 條數據測速: