美文网首页
Python使用SQLAlchemy访问MemFireDB

Python使用SQLAlchemy访问MemFireDB

作者: 蓝色信仰 | 来源:发表于2021-06-11 10:36 被阅读0次

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

    最近在体验 MemFire Cloud,如果大家有个人项目或者公司内部测试项目,推荐大家尝试一下,挺方便的,不用自己搭建数据库,在家或者公司随时可以访问,这是我的邀请码:hm2tJQ hm3U69

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

    https://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()
    

    相关文章

      网友评论

          本文标题:Python使用SQLAlchemy访问MemFireDB

          本文链接:https://www.haomeiwen.com/subject/ouimeltx.html