Как подключиться к уже существующей базе данных в python [duplicate]

0
задан JohnnyHK 6 September 2014 в 04:16
поделиться

2 ответа

Ответ Wes Widner правильный в том, что вы, скорее всего, имеете непечатаемый символ. Однако вместо того, чтобы напрямую удалять файлы из файловой системы, я предпочитаю более программный подход. Ключевыми здесь являются: никогда не ссылаться на базу данных по ее буквальному имени, а вместо этого ссылаться на имя в переменной форме:

  1. Список всех баз данных
  2. Отфильтровать эти базы данных в соответствии с критериями, которые вы ищете
  3. Преобразовать полученный список (массив) только в имена базы данных
  4. Выбрать конкретный индекс рассматриваемого db (я не мог понять способ перебирать каждую результирующую базу данных и применять getSiblingDB к каждому из них).
  5. Передайте это в db.getSiblingDB и выпустите db.dropDatabase

Рабочий пример

use bogus;
db.createCollection('blah');
db.getCollectionNames(); // [ "blah", "system.indexes" ]

use admin;
db.adminCommand({listDatabases:1}).databases.filter(function(d){
    return d.name === 'bogus';
}).map(function(d){
    return d.name;
}); // [ "bogus" ]


// use [0] here since we now 'bogus' was at index 0 in previous
// getSiblingDB will allow us to issue dropDatabase on the string
// representation of the database
db.getSiblingDB(db.adminCommand({listDatabases:1}).databases.filter(function(d){
    return d.name === 'bogus';
}).map(function(d){
    return d.name;
})[0]).dropDatabase();

Настройка его на вашу проблему

Вместо специальной фильтрации с помощью name мы хотим отфильтровать по sizeOnDisk. Не забудьте выбрать «admin» здесь, поэтому сначала запустите adminCommand с фильтром / картой, чтобы получить соответствующий индекс. Скорее всего, «admin» будет иметь индекс 0, поэтому ваша база данных, скорее всего, будет указана в индексе 1:

db.getSiblingDB(db.adminCommand({listDatabases:1}).databases.filter(function(d){
    return !d.sizeOnDisk;
}).map(function(d){
    return d.name;
})[1]).dropDatabase(); // note usage of [1] here
0
ответ дан Community 25 August 2018 в 14:12
поделиться

Имена базы данных не совпадают, а именно, что у него есть непечатаемый символ, в котором javascript-интерфейс оболочки mongo подавляется для вас.

В mongo его до драйвера, чтобы сделать убедитесь, что пользователь не может отправить нестандартные данные на сервер, но было продемонстрировано , что BSON обладает замечательной гибкостью в том, что он может хранить.

Поскольку вы говорите о всей базе данных самый простой способ исправить эту проблему - закрыть mongo и удалить файлы базы данных. Вы можете найти, где находятся эти файлы с командой db.serverCmdLineOpts().

1
ответ дан Wes Widner 25 August 2018 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: