Python,Nameko,Nameko sqlalchemy:Error:db_uris=self.container.config[db_uris_KEY]KeyError:&x27;DB#U URI';

Python,Nameko,Nameko sqlalchemy:Error:db_uris=self.container.config[db_uris_KEY]KeyError:&x27;DB#U URI';,python,sqlalchemy,microservices,nameko,Python,Sqlalchemy,Microservices,Nameko,大家好 首先,我想让大家知道,我刚刚开始学习python微服务库Nameko 我试图创建一个简单的微服务,使用nameko-sqlalchemy扩展在Sqlite数据库中添加一个用户。当我尝试使用Nameko命令运行微服务时:Nameko run user\u service,我得到错误: Connected to amqp://guest:**@127.0.0.1:5672// starting services: userService Traceback (most recent call

大家好

首先,我想让大家知道,我刚刚开始学习python微服务库Nameko

我试图创建一个简单的微服务,使用nameko-sqlalchemy扩展在Sqlite数据库中添加一个用户。当我尝试使用Nameko命令运行微服务时:Nameko run user\u service,我得到错误:

Connected to amqp://guest:**@127.0.0.1:5672//
starting services: userService
Traceback (most recent call last):
  File "/home/yek/Documents/my_development/micro_service_project/ms_env/lib/python3.6/site-packages/eventlet/hubs/hub.py", line 461, in fire_timers
    timer()
  File "/home/yek/Documents/my_development/micro_service_project/ms_env/lib/python3.6/site-packages/eventlet/hubs/timer.py", line 59, in __call__
    cb(*args, **kw)
  File "/home/yek/Documents/my_development/micro_service_project/ms_env/lib/python3.6/site-packages/eventlet/greenthread.py", line 221, in main
    result = function(*args, **kwargs)
  File "/home/yek/Documents/my_development/micro_service_project/ms_env/lib/python3.6/site-packages/nameko/utils/concurrency/__init__.py", line 76, in call
    return getattr(item, name)(*args, **kwargs)
  File "/home/yek/Documents/my_development/micro_service_project/ms_env/lib/python3.6/site-packages/nameko_sqlalchemy/database_session.py", line 24, in setup
    db_uris = self.container.config[DB_URIS_KEY]
KeyError: 'DB_URIS'
我使用下面的代码:

用户服务.py

from nameko_sqlalchemy import DatabaseSession
from nameko.rpc import rpc
from nameko.containers import ServiceContainer

from model import DeclarativeBase
from model import User

class UserService(object):
    name = 'userService'

    db = DatabaseSession(DeclarativeBase)

    @rpc
    def write_to_db(self, user_id, first_name, last_name):
        user = User(user_id, first_name, last_name)

        with self.db.get_session() as session:
            session.add(user)
            session.commit()


CONFIG = {
            "AMQP_URI":"amqp://guest:guest@localhost",
            "DB_URIS":
                      {"userService:Base":"sqlite:///data.db"}
         }

container = ServiceContainer(UserService,config=CONFIG)

service_extention = list(container.extensions)

container.start()

container.stop()

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime


DeclarativeBase = declarative_base()

class User(DeclarativeBase):
    __tablename__ = "users"

    user_id = Column(Integer,primary_key=True)
    first_name = Column(String)
    last_name = Column(String)

    def __init__(self, user_id, first_name, last_name):
        self.user_id = user_id
        self.first_name = first_name
        self.last_name = last_name 


if __name__ == "__main__":
    from sqlalchemy import create_engine

    engine = create_engine('sqlite:///data.db', echo = True)
    DeclarativeBase.metadata.create_all(engine)

与:

model.py

from nameko_sqlalchemy import DatabaseSession
from nameko.rpc import rpc
from nameko.containers import ServiceContainer

from model import DeclarativeBase
from model import User

class UserService(object):
    name = 'userService'

    db = DatabaseSession(DeclarativeBase)

    @rpc
    def write_to_db(self, user_id, first_name, last_name):
        user = User(user_id, first_name, last_name)

        with self.db.get_session() as session:
            session.add(user)
            session.commit()


CONFIG = {
            "AMQP_URI":"amqp://guest:guest@localhost",
            "DB_URIS":
                      {"userService:Base":"sqlite:///data.db"}
         }

container = ServiceContainer(UserService,config=CONFIG)

service_extention = list(container.extensions)

container.start()

container.stop()

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, DateTime


DeclarativeBase = declarative_base()

class User(DeclarativeBase):
    __tablename__ = "users"

    user_id = Column(Integer,primary_key=True)
    first_name = Column(String)
    last_name = Column(String)

    def __init__(self, user_id, first_name, last_name):
        self.user_id = user_id
        self.first_name = first_name
        self.last_name = last_name 


if __name__ == "__main__":
    from sqlalchemy import create_engine

    engine = create_engine('sqlite:///data.db', echo = True)
    DeclarativeBase.metadata.create_all(engine)

环境: nameko 2.12.0/ nameko sqlalchemy 1.5.0/ Ubuntu 18.04.4 LTS/ Python 3.6.9/ 虚拟的

提前谢谢你的帮助

问候,, Younes

在学习了之后,我发现了我运行代码的方法出了什么问题

解决办法是:

  • 直接使用Nameko CLI,正如我在下面所做的那样,但添加了配置文件。新命令如下所示:nameko运行用户服务--config./config.yaml /config.yaml
  • 要在添加服务容器或运行程序后直接运行user_service.py文件,并将配置作为dict传递。解决方案需要为每次使用运行python文件。我想我错过了第二条路
  • 我希望这会有帮助