Как узнать значение в столбце таблицы базы данных и поработать с ним? (Postgresql, Go)
В одной из функций в коде я с помощью insert вносил значения в базу данных. Для лучшего понимания уточню. Таблица выглядит так:
Name | Blocked_Amount | Charged_Amount |
Vasya |10 000____________|____________________|
Данные в таблицу занесены, далее мне нужно в другой функции (более того в другом хэндлере), что усложняет задачу внести данные в столбец Charged_Amount, но при этом он не должен быть больше Blocked_AMount, а значит прежде чем вносить данные в этот столбец я должен это число сравнить с уже внесенным в таблицу
Если есть возможность как то вытащить это число из базы данных сравнить со входящими данными в моем коде и затем произвести запись в БД, то расскажите пожалуйста как
Если бы это нужно было сделать в пределе одного Хэндлера, то все просто, но в разных не пойму как
Ответы (2 шт):
Думаю что можно использовать один запрос, думаю что то типа такого
cursor.execute("""
UPDATE main SET (charged_amount=$1) WHERE $1 < blocked_amount and name = $2;
""", ["vasya", 1]
У меня получилось так:
select * from main;
name | blocked_amount | charged_amount
--------+----------------+----------------
vasya | 1 | 1
vasya2 | 3 | 4
vasya2 | 3 |
vasya2 | 3 | 7
vasya2 | 3 | 9
vasya5 | 1 |
vasya5 | | 1
UPDATE main SET charged_amount = -2 WHERE -2 < blocked_amount and name = 'vasya5';
UPDATE 1
select * from main;
name | blocked_amount | charged_amount
--------+----------------+----------------
vasya | 1 | 1
vasya2 | 3 | 4
vasya2 | 3 |
vasya2 | 3 | 7
vasya2 | 3 | 9
vasya5 | | 1
vasya5 | 1 | -2
(7 rows)
Если я правильно понял вопрос: У вас есть данные которое приходят в программу откуда-то помимо бд и вам нужно эти данные сверить с тем что в бд.
type Data struct {
item string
}
var dbconnect string = "host=localhost port=5432 user=dbowner dbname=name sslmode=disable password=password"
func GetData(id string) []Data {
db, _ := sql.Open("postgres", dbconnect)
rowsData, _ := db.Query("select <нужное поле таблицы> from <TableName> where id=$1", id)
db.Close()
var Na []Data
for rowsData.Next() {
n := Data{}
rowsData.Scan(&n.item)
Na = append(Na, n)
}
rowsData.Close()
return Na
}
Дальше пройдите по массиву и получите значение поля.
func Rang(id string) {
data := GetData(id)
for _, it := range data {
fmt.Println(it)
}
}
C it можете сверять другие переменные так как it это как раз то что было в значении поля в бд и теперь оно просто переменная. Код не проверял, но должен работать.