【问题标题】:mongoengine.connect - How to connect to another port that is not default?mongoengine.connect - 如何连接到另一个非默认端口?
【发布时间】:2019-08-24 03:09:21
【问题描述】:

我正在做一个 python 程序,我想使用 mongoengine 连接 MongoDB。

我使用的是 Macbook pro 2016。在终端上,我点击“mongod --port 27018”,一切正常。此外,Robo 3T 显示连接有效。问题是当运行“python3 User.py”时出现错误:

MongoEngineConnectionError: 你没有定义默认连接。

mongoengine.connect(db="Telegram_User_DataBase", alias="telegramUDB", port=27018)

class User(mongoengine.Document):
    name = mongoengine.StringField()
    last_name = mongoengine.StringField()
    username = mongoengine.StringField()
    telegramID = mongoengine.StringField()
    is_bot = mongoengine.BooleanField()

def newUser(self, name, last_name, username, telegramID, is_bot):
        """Cria um novo usuario e o salva no banco de dados Telegram_User_DataBase"""
        self.name = name
        self.last_name = last_name
        self.username = username
        self.telegramID = telegramID
        self.is_bot = is_bot
        self.save() #error goes right here

#testing
user1 = User()
user1.newUser("erick", "giff", "egf", "1234", False)

我原以为程序会在端口 27018 上创建我的数据库,但那没有发生。 我想也许我在第一行做错了什么,mongoengine.connect(...

【问题讨论】:

    标签: python telegram mongoengine robo3t


    【解决方案1】:

    如果您有多个数据库,则需要使用 meta 类属性将模型附加到数据库,否则它们默认附加到 alias='default'

    例如:

    connect(db='test')    # identified by alias `default`
    connect(..., alias='telegramUDB')
    
    class User(Document):
        meta = {'db-alias': 'telegramUDB'}
        name = StringField()
    
    class Person(Document):    # implicitly attached to alias=default
        name = StringField()
    

    如果你只有1个数据库,调用connect()时最好不要设置alias,这样就不用处理bd-alias了

    查看此页面了解更多信息:http://docs.mongoengine.org/guide/connecting.html#multiple-databases

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 2017-03-04
      • 1970-01-01
      • 2018-07-27
      • 2015-02-14
      • 1970-01-01
      • 2014-02-26
      • 2023-03-30
      相关资源
      最近更新 更多