前言
要詳細(xì)連接Oracle數(shù)據(jù)庫并使用SQLAlchemy進(jìn)行操作,按照以下步驟進(jìn)行配置和編寫代碼:
1. 安裝Oracle Instant Client
Oracle Instant Client:Oracle 提供的客戶端庫,可用于在 Python 中連接和操作 Oracle 數(shù)據(jù)庫
-
訪問 Oracle 官方網(wǎng)站:前往 Oracle 官方網(wǎng)站(instant-client/winx64-64-downloads)
可能需要?jiǎng)?chuàng)建一個(gè)免費(fèi)的 Oracle 賬號(hào)才能訪問下載頁面,然后根據(jù)你的操作系統(tǒng)和系統(tǒng)架構(gòu)(32位或64位)下載,這里選擇下載64位 -
下載文件并解壓到安裝 Oracle 的目錄中
-
設(shè)置環(huán)境變量:在 Windows 上,將 Oracle Instant Client 的路徑添加到 “
Path
” 環(huán)境變量中。 -
將oracle客戶端(就是新解壓到安裝目錄的文件夾)目錄下.dll文件復(fù)制到python環(huán)境下
-
修改oracle client目錄下 tnsnames.ora
如果目錄下不存在該文件,則復(fù)制到該目錄下
修改文件內(nèi)容 -
pycharm連接oracle測試
from sqlalchemy.orm import declarative_base from sqlalchemy import create_engine, Column, Integer, String, text from sqlalchemy.orm import sessionmaker engine = create_engine("oracle+cx_oracle://system:root@192.168.0.146:1521/orcl") # 獲取數(shù)據(jù)庫連接對(duì)象 connection = engine.connect() # 定義查詢語句 query = text("select sysdate from dual") # 執(zhí)行查詢 result = connection.execute(query) # 處理查詢結(jié)果 for row in result: print(row) # 關(guān)閉數(shù)據(jù)庫連接 connection.close()
完成上述步驟后,Oracle Instant Client 就安裝好了。使用相應(yīng)的 Python 庫(如 cx_Oracle)進(jìn)行 Oracle 數(shù)據(jù)庫連接和操作,提供正確的連接字符串和相關(guān)的配置信息(如用戶名、密碼、主機(jī)和端口等)即可
2. 安裝依賴庫
使用以下命令來安裝SQLAlchemy和cx_Oracle庫:
pip install SQLAlchemy
pip install cx_Oracle
3. 導(dǎo)入模塊并創(chuàng)建引擎
在Python代碼中,導(dǎo)入所需的模塊。這包括SQLAlchemy的create_engine
函數(shù)和相關(guān)類,以及cx_Oracle庫。
操作:新建一個(gè)database.py
類用于其他模塊引用
from sqlalchemy.orm import declarative_base
from sqlalchemy import create_engine, Column, Integer, String, text
from sqlalchemy.orm import sessionmaker
engine = create_engine("oracle+cx_oracle://system:root@192.168.0.146:1521/orcl")
# 創(chuàng)建一個(gè)基礎(chǔ)模型類,作為所有數(shù)據(jù)庫模型類的基類
Base = declarative_base()
# 創(chuàng)建映射類
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
# 在數(shù)據(jù)庫中創(chuàng)建表
Base.metadata.create_all(engine)
# 獲取數(shù)據(jù)庫連接對(duì)象
connection = engine.connect()
# 創(chuàng)建會(huì)話工廠
Session = sessionmaker(bind=engine)
# 創(chuàng)建會(huì)話對(duì)象
session = Session()
4. 操作oracle數(shù)據(jù)庫
4.1 新增數(shù)據(jù)
新建insert_users.py
用于新增數(shù)據(jù)
# 引入數(shù)據(jù)庫session模塊和User映射類
from database import User, session
# 創(chuàng)建數(shù)據(jù)
user = User(id=1, name='cxk', age=25)
session.add(user)
user = User(id=2, name='徐州蔡徐坤', age=18)
session.add(user)
user = User(id=3, name='阿坤', age=31)
session.add(user)
# 用于提交當(dāng)前會(huì)話中的所有掛起的事務(wù)操作
session.commit()
# 全量數(shù)據(jù)查詢
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age)
4.2 查詢數(shù)據(jù)
新建select_users.py
用于數(shù)據(jù)查詢
from database import User, session
print("-----全部數(shù)據(jù)查詢-----")
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age)
print("-----查詢年齡大于30的user-----")
users = session.query(User).where(User.age > 30)
for user in users:
print(user.id, user.name, user.age)
print("-----查詢名字包含'坤'的user-----")
users = session.query(User).filter(User.name.like("%坤%"))
for user in users:
print(user.id, user.name, user.age)
4.3 更新數(shù)據(jù)
新建update_book.py
用于數(shù)據(jù)修改
# 引入數(shù)據(jù)庫連接模塊和Book映射類
from database import User, session
# 全量數(shù)據(jù)查詢
user = session.query(User).filter(User.id == 1).first()
print("修改前數(shù)據(jù)")
print(user.id, user.name, user.age)
# 查詢出年齡大于30的user
user.name = "修改name"
session.add(user)
session.commit();
# 全量數(shù)據(jù)查詢
user = session.query(User).filter(User.id == 1).first()
print("修改后的數(shù)據(jù)")
print(user.id, user.name, user.age)
4.4 刪除數(shù)據(jù)
新建delete_users.py
用于數(shù)據(jù)刪除文章來源:http://www.zghlxwxcb.cn/news/detail-503098.html
# 引入數(shù)據(jù)庫連接模塊和Book映射類
from database import User, session
# 全量數(shù)據(jù)查詢
users = session.query(User).all()
print("刪除前數(shù)據(jù)")
for user in users:
print(user.id, user.name, user.age)
# 查詢出年齡大于30的user
users = session.query(User).where(User.age > 30)
for user in users:
# 刪除數(shù)據(jù)
session.delete(user)
# 會(huì)話事務(wù)提交
session.commit()
# 全量數(shù)據(jù)查詢
users = session.query(User).all()
print("刪除后數(shù)據(jù)")
for user in users:
print(user.id, user.name, user.age)
多說一句,沒事別xjb執(zhí)行刪除操作,硬盤有價(jià),數(shù)據(jù)無價(jià)!文章來源地址http://www.zghlxwxcb.cn/news/detail-503098.html
到了這里,關(guān)于Python 進(jìn)階(三):Python使用ORM框架SQLAlchemy操作Oracle數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!