Можете ли вы изменить выражение SQL SELECT на следующее и посмотреть, решит ли это вашу проблему:
cur.execute("SELECT COUNT(*) FROM cart WHERE id_users = " + str(uid) +";")
, а затем измените следующее на:
noOfItems = cur.fetchone()
return noOfItems[0]
noOfItems
будет удерживайте кортеж с одним элементом, значение COUNT(*)
, т.е. количество товаров в вашей корзине, где идентификатор пользователя равен uid
.
Надеюсь, это поможет!
Я бы создал следующее:
ErrorConfig _errorConfig = ...;
// ErrorConfig is a new config object containing only ErrorManager Configuration
ErrorManager _errorManager = new CustomErrorManager(_errorConfig);
ConfigManager _configManager = new CustomConfigManager(_errorManager);
Теперь ConfigManager
может использовать готовый к запуску ErrorManager без проблем с начальной загрузкой, когда ErrorManager
не готов обрабатывать ошибки.
Циклические ссылки обычно лучше всего очищать путем рефакторинга третьего класса, от которого оба зависят. Например, у вас может быть что-то вроде этого:
BootstrapConfigManager _bcm = new BootstrapConfigManager();
ErrorManager _errorManager = new CustomErrorManager(_bcm);
ConfigManager _configManager = new CustomConfigManager(_bcm, _errorManager);
Выполните рефакторинг кода. Вероятно, вы можете разбить классы, чтобы изолировать часть, которую вы можете инициализировать в первую очередь и передать обоим классам.
Я бы создал методы расширения для каждого вызываемого AddRelationship, передав другой объект в качестве параметра.
Переданный объект добавит связь, а затем вызовет метод AddRelationship другого:
static void AddRelationship(this ConfigManager configMgr, ErrorManager errMgr)
{
this.ErrorManager = errMgr;
if (this != errMgr.ConfigManager)
errMgr.AddRelationship(this);
}
static void AddRelationship(this ErrorManager errMgr, ConfigManager configMgr)
{
this.ConfigManager = configMgr;
if (this != configManager.errMgr)
configMgr.AddRelationship(this);
}
Это означает, что вы можете добавить отношения с помощью любого объекта.
ConfigManager cfg = new ConfigManager();
ErrorManager err = new ErrorManager();
//Assign using either:
err.AddRelationship(cfg);
//Or
cfg.AddRelationship(err);
Вам также следует создать расширения RemoveRelationship.
static void RemoveRelationship(this ConfigManager configMgr, ErrorManager errMgr)
{
if (this.errorManager == errMgr)
{
this.errorManager = null;
if (errManager.configManager == this)
errMgr.RemoveRelationship(this);
}
}
static void RemoveRelationship(this ErrorManager errMgr, ConfigManager cfgMgr)
{
if (this.ConfigManager == cfgMgr)
{
this.configManager = null;
if (cfgMgr.errorManager == this)
cfgMgr.RemoveRelationship(this);
}
}
Я не знаю, что циклические ссылки являются особенно хорошей практикой кодирования, но это должно решить поставленный вопрос.