Navigation

    MemFireDB论坛

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    教程34 | Python使用SQLAlchemy访问MemFireDB

    MemFireDB培训
    1
    1
    30
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      admin last edited by

      Python使用SQLAlchemy访问MemFireDB : https://mp.weixin.qq.com/s?__biz=MzAxMzgyMDc3MQ==&mid=2247484258&idx=1&sn=6ce98c1ee4a89429eea7209e51f72a45&scene=19#wechat_redirect

      之前看到一个帖子说的挺好,项目开发尽量不要自己造轮子,能用开源项目或者SAAS服务尽量用,很多事情都是跟时间赛跑。

      如果大家有个人项目或者公司内部测试项目,MemFire Cloud,推荐大家尝试一下,挺方便的,不用自己搭建数据库,在家或者公司随时可以访问。

      SQLAlchemy是Python中最常用的访问数据库的ORM库,MemFireDB兼容Postgres接口,所以可以直接把MemFireDB当Postgres使用。

      在 memfiredb.com 上创建数据库时,可以选择创建密码或者证书两种认证模式,在公网上部署的数据库,如果存储的是比较重要的数据,建议使用证书认证模式,该模式安全系数要高很多,撞库、彩虹表、暴力破解等传统的密码破解方式对证书认证是无能为力的。如果只是简单测试,可以使用密码认证方式,这种方式配置简单些。

      言归正传,下面是SQLAlchemy使用证书连接MemFireDB的例子,创建完数据库后,把下载的证书解压到代码同级的目录就可以了,记得将host、port、dbname、dbuser设置为对应的值:

      # -*- coding: utf-8 -*-
      
      import sys
      
      from sqlalchemy.ext.declarative import declarative_base
      from sqlalchemy import Column, Integer
      from sqlalchemy import create_engine
      from sqlalchemy.orm import sessionmaker
      import sqlalchemy.engine.url as url
      
      
      Base = declarative_base()
      
      
      class Counter(Base):
          __tablename__ = 'counters'
      
          id = Column(Integer, primary_key=True)
          counter = Column(Integer)
      
      
      engine = None
      
      
      def init_db_engine(host, port, dbname, user, ssl_ca, ssl_cert, ssl_key):
          global engine
          uri = url.URL(
              drivername="postgresql",
              host=host,
              port=port,
              username=user,
              database=dbname,
          )
      
          ssl_args = {
              "sslmode": "verify-ca",
              "sslrootcert": ssl_ca,
              "sslcert": ssl_cert,
              "sslkey": ssl_key
          }
          print ssl_args
          engine = create_engine(uri, connect_args=ssl_args, encoding='utf-8', echo=False,
                                 pool_size=100, pool_recycle=3600, pool_pre_ping=True)
      
      
      def get_session():
          global engine
          SessionCls = sessionmaker(bind=engine)
          return SessionCls()
      
      
      def main():
          host = sys.argv[1]
          port = int(sys.argv[2])
          dbname = sys.argv[3]
          dbuser = sys.argv[4]
      
          init_db_engine(host, port, dbname, dbuser, './root.crt', './memfiredb.crt', './memfiredb.key')
          Base.metadata.create_all(engine)
      
          session = get_session()
          session.execute('delete from counters')
          cnt = Counter(counter=1)
          session.add(cnt)
          session.commit()
          session.close()
      
      
      if __name__ == '__main__':
          main()
      
      1 Reply Last reply Reply Quote 1
      • First post
        Last post