当前位置:Gxlcms > 数据库问题 > Flask(flask_sqlalchemy)使用原生sql,多个数据库用法进行封装

Flask(flask_sqlalchemy)使用原生sql,多个数据库用法进行封装

时间:2021-07-01 10:21:17 帮助过:101人阅读

flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy()

新建一个py文件db_seeson.py

  1. <span style="color: #0000ff;">from</span> init <span style="color: #0000ff;">import</span><span style="color: #000000;"> db
  2. </span><span style="color: #0000ff;">def</span> fetch_to_dict(sql, params={}, fecth=<span style="color: #800000;">‘</span><span style="color: #800000;">all</span><span style="color: #800000;">‘</span>, bind=<span style="color: #000000;">None):
  3. </span><span style="color: #800000;">‘‘‘</span><span style="color: #800000;">
  4. dict的方式返回数据
  5. :param sql: select * from xxx where name=:name
  6. :param params:{‘name‘:‘zhangsan‘}
  7. :param fecth:默认返回全部数据,返回格式为[{},{}],如果fecth=‘one‘,返回单条数据,格式为dict
  8. :param bind:连接的数据,默认取配置的SQLALCHEMY_DATABASE_URL,
  9. :return:
  10. </span><span style="color: #800000;">‘‘‘</span><span style="color: #000000;">
  11. resultProxy </span>= db.session.execute(sql, params, bind=db.get_engine(bind=<span style="color: #000000;">bind))
  12. </span><span style="color: #0000ff;">if</span> fecth == <span style="color: #800000;">‘</span><span style="color: #800000;">one</span><span style="color: #800000;">‘</span><span style="color: #000000;">:
  13. result_tuple </span>=<span style="color: #000000;"> resultProxy.fetchone()
  14. </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> result_tuple:
  15. result </span>=<span style="color: #000000;"> dict(zip(resultProxy.keys(), list(result_tuple)))
  16. </span><span style="color: #0000ff;">else</span><span style="color: #000000;">:
  17. </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> None
  18. </span><span style="color: #0000ff;">else</span><span style="color: #000000;">:
  19. result_tuple_list </span>=<span style="color: #000000;"> resultProxy.fetchall()
  20. </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> result_tuple_list:
  21. result </span>=<span style="color: #000000;"> []
  22. keys </span>=<span style="color: #000000;"> resultProxy.keys()
  23. </span><span style="color: #0000ff;">for</span> row <span style="color: #0000ff;">in</span><span style="color: #000000;"> result_tuple_list:
  24. result_row </span>=<span style="color: #000000;"> dict(zip(keys, row))
  25. result.append(result_row)
  26. </span><span style="color: #0000ff;">else</span><span style="color: #000000;">:
  27. </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> None
  28. </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> result
  29. </span><span style="color: #008000;">#</span><span style="color: #008000;"> 分页</span>
  30. <span style="color: #0000ff;">def</span> fetch_to_dict_pagetion(sql, params={}, page=1, page_size=15, bind=<span style="color: #000000;">None):
  31. sql_count </span>= <span style="color: #800000;">"""</span><span style="color: #800000;">select count(*) as count from (%s) _count</span><span style="color: #800000;">"""</span> %<span style="color: #000000;"> sql
  32. total_count </span>= get_count(sql_count, params, bind=<span style="color: #000000;">bind)
  33. sql_page </span>= <span style="color: #800000;">‘</span><span style="color: #800000;">%s limit %s,%s</span><span style="color: #800000;">‘</span> % (sql, (page - 1) *<span style="color: #000000;"> page_size, page_size)
  34. </span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">‘</span><span style="color: #800000;">sql_page:</span><span style="color: #800000;">‘</span><span style="color: #000000;">, sql_page)
  35. result </span>= fetch_to_dict(sql_page, params, <span style="color: #800000;">‘</span><span style="color: #800000;">all</span><span style="color: #800000;">‘</span>, bind=<span style="color: #000000;">bind)
  36. result_dict </span>= {<span style="color: #800000;">‘</span><span style="color: #800000;">results</span><span style="color: #800000;">‘</span>: result, <span style="color: #800000;">‘</span><span style="color: #800000;">count</span><span style="color: #800000;">‘</span><span style="color: #000000;">: total_count}
  37. </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> result_dict
  38. </span><span style="color: #008000;">#</span><span style="color: #008000;"> 执行单条语句(update,insert)</span>
  39. <span style="color: #0000ff;">def</span> execute(sql, params={}, bind=<span style="color: #000000;">None):
  40. </span><span style="color: #0000ff;">print</span>(<span style="color: #800000;">‘</span><span style="color: #800000;">sql</span><span style="color: #800000;">‘</span><span style="color: #000000;">, sql)
  41. db.session.execute(sql, params, bind</span>=db.get_engine(bind=<span style="color: #000000;">bind))
  42. db.session.commit()
  43. </span><span style="color: #008000;">#</span><span style="color: #008000;"> 执行多条语句,失败自动回滚</span>
  44. <span style="color: #0000ff;">def</span><span style="color: #000000;"> execute_many(sqls):
  45. </span><span style="color: #0000ff;">print</span><span style="color: #000000;">(sqls)
  46. </span><span style="color: #0000ff;">if</span> <span style="color: #0000ff;">not</span><span style="color: #000000;"> isinstance(sqls, (list, tuple)):
  47. </span><span style="color: #0000ff;">raise</span> Exception(<span style="color: #800000;">‘</span><span style="color: #800000;">type of the parameters must be list or tuple</span><span style="color: #800000;">‘</span><span style="color: #000000;">)
  48. </span><span style="color: #0000ff;">if</span> len(sqls) ==<span style="color: #000000;"> 0:
  49. </span><span style="color: #0000ff;">raise</span> Exception(<span style="color: #800000;">"</span><span style="color: #800000;">parameters‘s length can‘t be 0</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  50. </span><span style="color: #0000ff;">for</span> statement <span style="color: #0000ff;">in</span><span style="color: #000000;"> sqls:
  51. </span><span style="color: #0000ff;">if</span> <span style="color: #0000ff;">not</span><span style="color: #000000;"> isinstance(statement, dict):
  52. </span><span style="color: #0000ff;">raise</span> Exception(<span style="color: #800000;">"</span><span style="color: #800000;">parameters erro</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  53. </span><span style="color: #0000ff;">try</span><span style="color: #000000;">:
  54. </span><span style="color: #0000ff;">for</span> s <span style="color: #0000ff;">in</span><span style="color: #000000;"> sqls:
  55. db.session.execute(s.get(</span><span style="color: #800000;">‘</span><span style="color: #800000;">sql</span><span style="color: #800000;">‘</span>), s.get(<span style="color: #800000;">‘</span><span style="color: #800000;">params</span><span style="color: #800000;">‘</span>), bind=db.get_engine(bind=s.get(<span style="color: #800000;">‘</span><span style="color: #800000;">bind</span><span style="color: #800000;">‘</span><span style="color: #000000;">, None)))
  56. db.session.commit()
  57. </span><span style="color: #0000ff;">except</span><span style="color: #000000;"> Exception as e:
  58. db.session.rollback()
  59. </span><span style="color: #0000ff;">raise</span> Exception(<span style="color: #800000;">"</span><span style="color: #800000;">execute sql fail ,is rollback</span><span style="color: #800000;">"</span>)

 

Flask(flask_sqlalchemy)使用原生sql,多个数据库用法进行封装

标签:rom   statement   int   数据库   自动   append   man   fail   ==   

人气教程排行