2023年7月20日发(作者:)
flask使⽤SQLAlchemy连接多个数据库进⾏orm操作如图为两个数据库的models:models为项⽬默认的数据库:通过settings中SQLALCHEMY_DATABASE_URI参数配置。wink_model为连接的第⼆个只读数据库:通过settings中SQLALCHEMY_BINDS参数配置。详见:SQLALCHEMY_BINDS = { 'winkdb': "{}+{}://{}:{}@{}:{}/{}?charset=utf8mb4".format("mysql","pymysql","root",123456,"127.0.0.1",3306,"db_name"), }在model模型中要指定 __bind_key__ = 'winkdb'指向该数据库,如果没有则会⾃动使⽤默认的数据库。如果两个数据库共同使⽤⼀个SQLAlchemy()对象,也可正常查询只是不能使⽤("sql语句")直接执⾏sql语句,查询时没有使⽤model模型⽽是直接使⽤数据库连接引擎直接执⾏sql语句所以会使⽤默认数据库进⾏查询。所以最好再创建⼀个SQLAlchemy()对象并指定那个数据库引擎——>wink_db = SQLAlchemy(session_options={"bind": create_engine(("HouseDevelopConfig").SQLALCHEMY_("winkdb"), pool_recycle=7200, pool_size=50)})这样不管怎样查询就都可以了。from flask_sqlalchemy import SQLAlchemyfrom sqlalchemy import create_enginefrom WinkChat import settingswink_db = SQLAlchemy(session_options={"bind": create_engine( ("HouseDevelopConfig").SQLALCHEMY_("winkdb"), pool_recycle=7200, pool_size=50)})class Tod(wink_): __bind_key__ = 'winkdb' id = wink_(wink_r, primary_key=True) name = wink_(wink_(64)) #
photo_id = wink_(wink_eger, default=0) # lang = wink_(wink_) #
vip = wink_(wink_nteger, default=0) #
price = wink_(wink_r, default=0) #
status = wink_(wink_nteger, default=0) #
__mapper_args__ = { "order_by": () }⼏种简单查询:from __model import Todfrom __model import wink_db 1. tods = wink_(Tod).all()
2. tods = () 3. tods = (=1) 4. tods = wink_e("select * from tod")
5. tods = wink_e("select * from tod where id={}".format(1)) # 字符串拼接sql可以但最好使⽤下边的参数绑定⽅式,防⽌sql注⼊。from sqlalchemy import texttod_sql = text("select * from tod where id=:tod_id")# 参数传字典可直接执⾏ 1. tods = wink_e(tod_sql, {'tod_id': 1})
# 传key=参数需要先创建⼀个connection()对象 2. conn =wink_tion() tods = e(tod_sql, tod_id=1)for td in tods: print()
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689824512a288906.html
评论列表(0条)