SQLalchemy连接数据库

1、连接命令
from sqlalchemy import create_engine
from sqlite3 import dbapi2 as sqlite
engine = create_engine('mysql+mysqldb://username:password@hostname:3306/database?charset=utf8')
engine = create_engine('mysql+pymysql://username:password@hostname:3306/database?charset=utf8')
engine = create_engine('sqlite+pysqlite:///file.db', module=sqlite)


#连接posgresql数据库
engine = create_engine('postgres://user:password@hostname/database')


#扩展
当passwd包含"@"的时候这串url就没法正常解析了
python2
from urllib import quote_plus as urlquote
from sqlalchemy.engine import create_engine
engine = create_engine('mysql+pymysql://username:%s@hostname:3306/database?charset=utf8' % urlquote('bad@pass'))


python3
from urllib import parse
from sqlalchemy.engine import create_engine
engine = create_engine('mysql+pymysql://username:%s@hostname:3306/database?charset=utf8' % parse.unquote_plus('bad@pass'))

更多详情请查看官网:https://docs.sqlalchemy.org/en/13/dialects/mysql.html

2、连接超时和断开

MySQL有一个自动的连接关闭行为,用于固定时间空闲的连接,默认为8小时。要避免出现此问题,请使用create_engine.pool_recycle选项,该选项确保如果连接在池中存在固定的秒数,则将丢弃该连接并替换为新连接

from sqlalchemy.engine import create_engine
engine = create_engine('mysql+pymysql://username:password@hostname:3306/database?charset=utf8',pool_recycle=3600)
3、处理二进制数据警告和Unicode

当试图将二进制数据传递到数据库时,MySQL 5.6、5.7及更高版本(撰写本文时不是Mariadb)现在发出警告,而当二进制数据本身对该编码无效时,字符集编码也就位

from sqlalchemy.engine import create_engine
# mysqlclient
engine = create_engine("mysql+mysqldb://username:password@hostname:3306/database?charset=utf8mb4&binary_prefix=true")

# PyMySQL
engine = create_engine("mysql+pymysql://username:password@hostname:3306/database?charset=utf8mb4&binary_prefix=true")

备注:其他MySQL驱动程序可能支持或不支持binary_prefix标志。
4、pandas批量将数据库数据保存到excel或者csv文件中
import pandas as pd
import re
from sqlalchemy import create_engine
name = '大王叫我来巡山'

engine = create_engine('mysql+mysqldb://username:password@hostname:3306/database?charset=utf8', echo=False)
data = engine.execute('select d.id,d.store_name,d.create_time,d.type,d.status,item.product_name,item.retail_price,item.sale_price,item.amount from ds_order d left join order_item item on d.id = item.order_id where d.company_name="%s";' %name)
df = pd.DataFrame(data=data,columns=['订单号','门店名称','订单创建时间','订单类型','订单状态','商品名称','商品现价','商品零售价','销售数量'])

#替换
df['订单状态']=df['订单状态'].map(lambda s:re.sub('PAID','已支付',s))
df['订单状态']=df['订单状态'].map(lambda s:re.sub('REFUND','已退款',s))

#保存
df.to_excel(f'{ name }.xls',index=False)
5、pandas批量将excel或者csv文件数据导入至数据库
import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('mysql+mysqldb://username:password@hostname:3306/database?charset=utf8', echo=False)
df = pd.read_excel('大王叫我来巡山.xlsx',encoding='utf-8',sheet_name='sheet1')
pd.DataFrame(df,
             columns=['订单号','门店名称','订单创建时间','订单类型','订单状态','商品名称','商品现价','商品零售价','销售数量']
             ).to_sql('ds_new',con=engine,if_exists='append',index=False)

#if_exists 值有 append,replace,fail,默认是fail
SQLAlchemy是一个Python的SQL工具和对象关系映射(ORM)库,它提供了一种连接和操作数据库的方式。下面是使用SQLAlchemy连接数据库的基本步骤: 1. 安装SQLAlchemy库:可以使用pip命令进行安装,如`pip install sqlalchemy`。 2. 导入SQLAlchemy模块:在Python脚本中导入SQLAlchemy模块,如`import sqlalchemy`。 3. 创建数据库引擎:使用`create_engine()`函数创建一个数据库引擎对象,该对象用于连接数据库。引擎对象需要指定数据库的连接字符串,例如: ```python from sqlalchemy import create_engine engine = create_engine('数据库连接字符串') ``` 4. 创建会话:使用`sessionmaker()`函数创建一个会话工厂对象,该对象用于创建会话。会话是与数据库进行交互的主要接口。例如: ```python from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind=engine) ``` 5. 连接数据库:使用会话工厂对象创建一个会话实例,通过该实例可以执行SQL语句和事务操作。例如: ```python session = Session() ``` 6. 执行SQL语句:使用会话对象执行SQL语句,可以使用SQLAlchemy提供的ORM功能进行对象关系映射操作,也可以直接执行原生的SQL语句。例如: ```python # 使用ORM功能 result = session.query(User).filter(User.name == 'Alice').all() # 执行原生SQL语句 result = session.execute("SELECT * FROM users") ``` 7. 提交事务和关闭会话:在完成数据库操作后,需要提交事务并关闭会话。例如: ```python session.commit() session.close() ``` 这是SQLAlchemy连接数据库的基本流程,具体的操作和使用方式可以根据实际需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值