之前看到一个帖子说的挺好,项目开发尽量不要自己造轮子,能用开源项目或者SAAS服务尽量用,很多事情都是跟时间赛跑。
如果大家有个人项目或者公司内部测试项目,MemFire Cloud,推荐大家尝试一下,挺方便的,不用自己搭建数据库,在家或者公司随时可以访问。
SQLAlchemy是Python中最常用的访问数据库的ORM库,MemFireDB兼容Postgres接口,所以可以直接把MemFireDB当Postgres使用。
在 memfiredb.com 上创建数据库时,可以选择创建密码或者证书两种认证模式,在公网上部署的数据库,如果存储的是比较重要的数据,建议使用证书认证模式,该模式安全系数要高很多,撞库、彩虹表、暴力破解等传统的密码破解方式对证书认证是无能为力的。如果只是简单测试,可以使用密码认证方式,这种方式配置简单些。
言归正传,下面是SQLAlchemy使用证书连接MemFireDB的例子,创建完数据库后,把下载的证书解压到代码同级的目录就可以了,记得将host、port、dbname、dbuser设置为对应的值:
1# -*- coding: utf-8 -*- 2 3import sys 4 5from sqlalchemy.ext.declarative import declarative_base 6from sqlalchemy import Column, Integer 7from sqlalchemy import create_engine 8from sqlalchemy.orm import sessionmaker 9import sqlalchemy.engine.url as url 10 11 12Base = declarative_base() 13 14 15class Counter(Base): 16 __tablename__ = 'counters' 17 18 id = Column(Integer, primary_key=True) 19 counter = Column(Integer) 20 21 22engine = None 23 24 25def init_db_engine(host, port, dbname, user, ssl_ca, ssl_cert, ssl_key): 26 global engine 27 uri = url.URL( 28 drivername="postgresql", 29 host=host, 30 port=port, 31 username=user, 32 database=dbname, 33 ) 34 35 ssl_args = { 36 "sslmode": "verify-ca", 37 "sslrootcert": ssl_ca, 38 "sslcert": ssl_cert, 39 "sslkey": ssl_key 40 } 41 print ssl_args 42 engine = create_engine(uri, connect_args=ssl_args, encoding='utf-8', echo=False, 43 pool_size=100, pool_recycle=3600, pool_pre_ping=True) 44 45 46def get_session(): 47 global engine 48 SessionCls = sessionmaker(bind=engine) 49 return SessionCls() 50 51 52def main(): 53 host = sys.argv[1] 54 port = int(sys.argv[2]) 55 dbname = sys.argv[3] 56 dbuser = sys.argv[4] 57 58 init_db_engine(host, port, dbname, dbuser, './root.crt', './memfiredb.crt', './memfiredb.key') 59 Base.metadata.create_all(engine) 60 61 session = get_session() 62 session.execute('delete from counters') 63 cnt = Counter(counter=1) 64 session.add(cnt) 65 session.commit() 66 session.close() 67 68 69if __name__ == '__main__': 70 main()
