1. 程式人生 > >利用python的pyodbc連線access 資料庫 & pyodbc的基本用法

利用python的pyodbc連線access 資料庫 & pyodbc的基本用法

一、安裝第三方庫 pyodbc

Pip install pyodbc

二、檢驗是否可以正常連線資料庫

檢查是否有一個Microsoft Access ODBC驅動程式可用於你的Python環境(在Windows上)的方法:
>>> import pyodbc
>>> [x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]

如果看到一個空列表,那麼您正在執行64位Python,並且需要安裝64位版本的“ACE”驅動程式。如果您只看到['Microsoft Access Driver (*.mdb)']並且需要使用.accdb檔案,那麼您需要安裝32位版本的“ACE”驅動程式

 

三、安裝64位的ODBC 驅動器:

 

64位ODBC驅動器的下載地址 https://www.microsoft.com/en-us/download/details.aspx?id=13255

 

直接安裝會報錯,所以我們需要修改一下檔案AccessDatabaseEngine_X64.exe,先對其進行解壓,然後開啟AccessDatabaseEngine_X64資料夾,有一個AceRedist.msi檔案。

Orca軟體將AceRedist.msi開啟,找到找到LaunchCondition裡面的BLOCKINSTALLATION,刪除那一行資料並進行儲存。

然後再執行AceRedist.msi,就可以把64位的ODBC 驅動器安裝成功。

 

注意:

1、不用配置資料來源

2、Orcad的下載地址 http://www.technipages.com/downloads/OrcaMSI.zip

 

四、測試程式碼
# -*-coding:utf-8-*-
import pyodbc

# 連線資料庫(不需要配置資料來源),connect()函式建立並返回一個 Connection 物件
cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\data\goods.mdb')
# cursor()使用該連線建立(並返回)一個遊標或類遊標的物件
crsr = cnxn.cursor()

# 列印資料庫goods.mdb中的所有表的表名
print('`````````````` goods ``````````````')
for table_info in crsr.tables(tableType='TABLE'):
    print(table_info.table_name)


l = crsr.execute("SELECT * from goods WHERE goodsId='0001'")# [('0001', '扇葉', 20, 'A公司', 'B公司', 2000, 2009)]

rows = crsr.execute("SELECT currentStock from goods")  # 返回的是一個元組
for item in rows:
    print(item)

l = crsr.execute("UPDATE users SET username='lind' WHERE password='123456'")
print(crsr.rowcount)  # 想知道資料修改和刪除時,到底影響了多少條記錄,這個時候你可以使用cursor.rowcount的返回值。

# 修改資料庫中int型別的值
value = 10
SQL = "UPDATE goods " \
      "SET lowestStock=" + str(value) + " " \
      "WHERE goodsId='0005'"

# 刪除表users
crsr.execute("DROP TABLE users")
# 建立新表 users
crsr.execute('CREATE TABLE users (login VARCHAR(8),userid INT, projid INT)')
# 給表中插入新資料
crsr.execute("INSERT INTO users VALUES('Linda',211,151)")

''''''
# 更新資料
crsr.execute("UPDATE users SET projid=1 WHERE userid=211")

# 刪除行資料
crsr.execute("DELETE FROM goods WHERE goodNum='0001'")

# 列印查詢的結果
for row in crsr.execute("SELECT * from users"):
    print(row)


# 提交資料(只有提交之後,所有的操作才會對實際的物理表格產生影響)
crsr.commit()
crsr.close()
cnxn.close()