database.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # -*- coding: utf-8 -*-
  2. import sqlalchemy
  3. from sqlalchemy import create_engine
  4. from sqlalchemy.ext.declarative import declarative_base
  5. from sqlalchemy.orm import sessionmaker
  6. from config import settings
  7. from contextlib import contextmanager
  8. mysql_dwd_config = {
  9. 'drivername': 'mysql+pymysql',
  10. 'username': settings.MYSQL_USER,
  11. 'password': settings.MYSQL_PASSWORD,
  12. 'host': settings.MYSQL_SERVER,
  13. 'port':settings.MYSQL_PORT,
  14. 'database': settings.MYSQL_DB_NAME
  15. }
  16. mysql_dwd_config_sharedb = {
  17. 'drivername': 'mysql+pymysql',
  18. 'username': settings.MYSQL_USER,
  19. 'password': settings.MYSQL_PASSWORD,
  20. 'host': settings.MYSQL_SERVER,
  21. 'port':settings.MYSQL_PORT,
  22. 'database': 'sharedb'
  23. }
  24. if sqlalchemy.__version__ >= '1.4':
  25. mysql_engine_url = sqlalchemy.engine.URL.create(**mysql_dwd_config)
  26. mysql_engine_url = mysql_engine_url.update_query_dict({'charset': 'utf8mb4'})
  27. mysql_engine_url_sharedb = sqlalchemy.engine.URL.create(**mysql_dwd_config_sharedb)
  28. mysql_engine_url_sharedb = mysql_engine_url_sharedb.update_query_dict({'charset': 'utf8mb4'})
  29. else:
  30. mysql_engine_url = '{drivername}://{username}:{password}@{host}:{port}/{database}?charset=utf8mb4'.format(**mysql_dwd_config)
  31. mysql_engine_url_sharedb = '{drivername}://{username}:{password}@{host}:{port}/{database}?charset=utf8mb4'.format(**mysql_dwd_config_sharedb)
  32. engine = create_engine(mysql_engine_url, echo=False, pool_size=10, pool_recycle=360, pool_pre_ping=True)
  33. SessionLocal = sessionmaker(bind=engine)
  34. engine_sharedb = create_engine(mysql_engine_url_sharedb, echo=False, pool_size=3, pool_recycle=360, pool_pre_ping=True)
  35. SessionLocalShareDb = sessionmaker(bind=engine_sharedb)
  36. Base = declarative_base()
  37. def get_db_share():
  38. try:
  39. db = SessionLocalShareDb()
  40. yield db
  41. finally:
  42. db.close()
  43. # Dependency
  44. def get_db():
  45. try:
  46. db = SessionLocal()
  47. yield db
  48. finally:
  49. db.close()
  50. # 适用scheduler
  51. @contextmanager
  52. def get_local_db():
  53. try:
  54. db = SessionLocal()
  55. yield db
  56. finally:
  57. db.close()
  58. @contextmanager
  59. def get_share_db():
  60. try:
  61. db = SessionLocalShareDb()
  62. yield db
  63. finally:
  64. db.close()
  65. # def get_db_local():
  66. # return SessionLocal()
  67. # from database import engine
  68. # from models.geojson_base import *
  69. # from shapely.geometry import shape
  70. # import json
  71. # import pymysql
  72. # # db = get_db_local()
  73. # conn = pymysql.connect(host=settings.MYSQL_SERVER,
  74. # user=settings.MYSQL_USER,
  75. # password=settings.MYSQL_PASSWORD,
  76. # database=settings.MYSQL_DB_NAME,
  77. # port=settings.MYSQL_PORT,
  78. # charset='utf8mb4')
  79. # cur = conn.cursor()
  80. # with open('/home/python3/zj_geojson.json', 'r', encoding='utf-8') as file:
  81. # geojson = json.load(file)
  82. # features = geojson.get('features', [])
  83. # for feature in features:
  84. # # print(feature)
  85. # name = feature['properties'].get('NAME', '')
  86. # geom = shape(feature['geometry']).__geo_interface__ # 将Shapely对象转换为GeoJSON
  87. # # print(geom)
  88. # properties = json.dumps(feature['properties'], ensure_ascii=False)
  89. # pac = feature['properties'].get('PAC', '')
  90. # sql = """
  91. # INSERT INTO tp_geojson_data_zj (name, geometry, properties,pac)
  92. # VALUES (%s, ST_GeomFromGeoJSON(%s), %s,%s)
  93. # """
  94. # # 执行插入操作
  95. # cur.execute(sql, (name, json.dumps(geom), properties,pac))
  96. # conn.commit()
  97. # 提交事务
  98. # break
  99. # 提交事务
  100. # db.commit()
  101. # # 关闭会话
  102. # db.close()
  103. #from models.oneshare_base import Base
  104. #from models.knowledge_base import Base
  105. #
  106. # #使用Base的metadata和engine来创建所有表
  107. #Base.metadata.create_all(bind=engine)