如何用Python自动操作数据库?
林骥
共 3248字,需浏览 7分钟
·
2020-11-22 20:43
你好,我是林骥。
技术其实分为术和道两种,具体的做事方法是术,做事的原理和原则是道。
pip install sqlalchemy
# 导入库
import sqlalchemy as sa
# 查看 SQLAlchemy 版本
sa.__version__
pip install cx_Oracle
from sqlalchemy import create_engine
# 创建数据库引擎
engine = create_engine('oracle://user:password@ip_address:1521/orcl')
# 连接数据库
con = engine.connect()
# 执行创建表的 SQL 语句
sql = 'create table usr(id integer, name varchar2(50))'
con.execute(sql)
# 增
con.execute("insert into usr(id, name) values(1, 'Jim')")
con.execute("insert into usr(id, name) values(2, 'Joe')")
# 删
con.execute('delete from usr where id = 1')
# 改
con.execute("update usr set name = 'Jack' where id = 2")
# 查
sql = 'select id, name from usr where id = :id'
import pandas as pd
df = pd.read_sql(sa.text(sql), engine, params={'id': 2})
df
from sqlalchemy.types import NVARCHAR, Float, Integer
# 映射数据中的列与数据类型,避免存为 CLOB
def mapping_df_types(df):
dtypedict = {}
for i, j in zip(df.columns, df.dtypes):
if "object" in str(j):
dtypedict.update({i: NVARCHAR(length=255)})
if "float" in str(j):
dtypedict.update({i: Float(precision=2, asdecimal=True)})
if "int" in str(j):
dtypedict.update({i: Integer()})
return dtypedict
# 把数据备份到数据库,替换现有表,如果把 replace 换成 append,那么就是附加数据
dtypedict = mapping_df_types(df)
df.to_sql('usr_backup', engine, index=False, if_exists='replace', dtype=dtypedict)
# 删除表
con.execute('drop table usr')
con.execute('drop table usr_backup')
# 关闭数据库连接
con.close()
往期推荐
评论