- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
def __get_column_names(table: str) -> tuple:
try:
with conn:
cur.execute("SELECT name FROM PRAGMA_TABLE_INFO(?)", (table,))
column_names = cur.fetchall()
except Exception as excpt:
print(excpt)
column_names = tuple(i[0] for i in column_names)
return column_names
def db_register_user(user_data: types.User):
"""
SQL запрос для внесения данных о пользователе
Args:
user_data: telebot User объект, содержащий словарь с параметрами пользователя
"""
user_data = user_data.to_dict()
column_names: tuple = __get_column_names('Users')
user_values = tuple(user_data.get(key) for key in column_names if key in user_data)
try:
with conn:
query = 'INSERT INTO Users cn'.replace('cn', str(column_names))+' VALUES (?,?,?,?,0,3)'
parameters = (*user_values,)
conn.execute(query, parameters)
except Exception as excpt:
print(excpt)
conn.close()
На сколько в такой ситуации .format не безопасен? Идея в том, чтобы не объебошится программисту в коде введя неверное значение колонки. Для этого имена колонок берутся из самой базы (есть мысль ещё и типы брать). Есть вариант реализации получше? Спасибо
rockkley94 26.12.2022 23:43 # 0
bootcamp_dropout 27.12.2022 00:12 # +2
rockkley94 27.12.2022 04:06 # 0
guest6 27.12.2022 04:29 # +2
Серьезно, не нужно делать кривое квадратное колесо
https://docs.djangoproject.com/en/4.1/topics/db/models/
ISO 27.12.2022 09:30 # 0
Fike 27.12.2022 07:15 # 0
guest6 27.12.2022 16:38 # +1
Gorbatokaloedov 27.12.2022 17:50 # 0
bootcamp_dropout 27.12.2022 14:15 # 0
Проблемы с твоим подходом:
1) Ты делаешь два запроса в бд когда можно делать один. Это увеличивает время обработки запроса и больше потенциальных точек отказа.
2) У тебя захардкожено 4 параметра в кверю если я правильно понимаю, то есть тебе все равно придется менять это место в коде когда захочешь поддерживать новую колонку.
3) Если ты будешь добавлять новые колонки не строго в конец таблицы, то рано или поздно ты знапишешь что-то не так. С твоим подходом, ты в принципе сильно повышаешь вероятность что-то записать не так.
4) Именнованные параметры намного лучше читаются в логах или инструментации твоей бд.
guest6 27.12.2022 16:37 # 0
Есть и другой подход. Скажем, EF умеет генерировать схему по коду, но как правило схема получается не очень.
А например в Django модель хоть и описываеца на питоне, но всё равно четко отражает СУБД
Desktop 27.12.2022 17:26 # 0
- graphql вроде так же делает
Fike 27.12.2022 19:29 # 0
Опровергаю. Есть бизнес-контракты, требования к самому приложению, есть апи, которое оно должно предоставлять. Обычно оно выражается в каких-то структурах-объектах и сервисах. И вот уже от них пляшет вообще всё остальное.
guest6 27.12.2022 19:37 # 0
Ты можешь сделать АПИ сервиса леера в бизнес-терминах, а слой доступа к базе в терминах базы, а потом их склеить, не?
bootcamp_dropout 27.12.2022 20:03 # 0
В продуктовой разработке ничего этого нет. Именно потому я за продуктовую разработку.
guest6 02.06.2024 14:57 # 0
guest6 02.06.2024 15:39 # 0
guest6 02.06.2024 16:31 # 0
guest6 02.06.2024 16:35 # 0
Desktop 02.06.2024 21:27 # 0
bootcamp_dropout 17.08.2024 10:06 # 0
Сам как?
guest6 17.08.2024 11:46 # 0
bootcamp_dropout 17.08.2024 12:24 # 0
теперь или я не тот, или этого стало меньше
guest6 17.08.2024 12:31 # 0
bootcamp_dropout 17.08.2024 12:33 # 0
guest6 17.08.2024 12:35 # 0
bootcamp_dropout 17.08.2024 13:29 # 0
Субкультуры позже найду
bootcamp_dropout 17.08.2024 13:40 # 0
Дискуссии позже найду
guest6 17.08.2024 15:04 # 0
bootcamp_dropout 17.08.2024 21:30 # 0
guest6 17.08.2024 21:55 # 0
Пол часа переписываешься с водителем, который хочет назначить цену выше, чем в приложении, в итоге соглашается как есть, либо уезжает нахуй, не отменяя заказ.
Если приезжает, то ты садишься в машину и он отменяет заказ, чтобы я ему рейтинг хуёвый не въебал. А рейтинг у водителя 5.0, хуле.
guest6 17.08.2024 22:10 # 0
Дайте угадаю. Рейтинг состоит из единственной оценки?
guest6 17.08.2024 22:11 # 0
guest6 17.08.2024 22:13 # 0
guest6 17.08.2024 22:22 # 0
Получаешь X$ от пассажира наличкой. А в приложении отмечаешь, что пассажир дал X$-5$. 5$ — твой заработок с нихуя, а у пассажира долг.
А если долг выше какого-то порога, то его нельзя оплатить наличными при следующей поездке и в самый неподходящий момент (нужно ехать в аэропорт, например) выясняется, что тебе отказывают в обслуживании до погашения долга.
guest6 17.08.2024 22:26 # 0
Desktop 17.08.2024 22:50 # 0
> твой заработок с нихуя, а у пассажира долг
– и сколько раз прокатывает такой фокус?
guest6 17.08.2024 23:07 # 0
guest6 17.08.2024 23:13 # 0
Почему-то карту мою не принимал.
> и сколько раз прокатывает такой фокус?
Сколько угодно раз. Ведь в поддержку даже пожаловаться нельзя.
Uber — говно ебаное. Это вам не "Яндекс.Такси", где водителя бы выебали за это.
Desktop 17.08.2024 23:22 # 0
– что, простите
Не, я понимаю, что она там в приложении на уровне автоответчика, но вроде ж есть пункт "возникла проблема с поездкой"
но вообще в уберах у водилы больше вариантов кинуть пассажира, чем наоборот, это да
bootcamp_dropout 18.08.2024 14:21 # 0
guest6 17.08.2024 13:45 # 0
bootcamp_dropout 17.08.2024 21:30 # 0
guest6 17.08.2024 21:37 # 0
guest6 17.08.2024 21:59 # 0
guest6 17.08.2024 22:11 # 0
bootcamp_dropout 18.08.2024 14:19 # 0
guest6 18.08.2024 14:23 # 0
(нас тут двое кстати из-под геста пишет, если что)
bootcamp_dropout 18.08.2024 14:25 # 0
guest6 18.08.2024 14:38 # 0
guest6 31.08.2024 01:05 # 0
guest6 31.08.2024 01:11 # 0
guest6 31.08.2024 01:25 # 0
guest6 31.08.2024 06:03 # 0
Waaneer kan je naar Asmterdam?
guest6 31.08.2024 13:07 # 0
guest6 31.08.2024 12:01 # 0
guest6 31.08.2024 13:05 # 0
Но я не принимаю уже больше трёх лет
Они тупо не работают
guest6 31.08.2024 13:09 # 0
guest6 31.08.2024 13:18 # 0
guest6 31.08.2024 13:58 # 0
guest6 31.08.2024 14:55 # 0
guest6 31.08.2024 15:24 # 0
guest6 17.08.2024 21:59 # 0
guest6 17.08.2024 22:13 # 0
guest6 17.08.2024 22:16 # 0
Те, кого комиссовали после ранения?
guest6 17.08.2024 22:23 # 0
guest6 17.08.2024 22:28 # 0
guest6 17.08.2024 14:26 # 0
doomginho 18.08.2024 23:48 # 0
Desktop 17.08.2024 17:11 # 0
rockkley94 02.06.2024 10:08 # 0
guest6 02.06.2024 14:57 # 0
guest6 02.06.2024 16:33 # 0
guest6 02.06.2024 16:34 # 0
guest6 27.12.2022 00:16 # +2
Stallman 28.12.2022 16:17 # 0
Soul_re@ver 28.12.2022 16:30 # +1
guest6 28.12.2022 16:34 # 0
Rooster 28.12.2022 17:20 # 0
necKoB 28.12.2022 20:14 # 0
TAPAC 29.12.2022 15:46 # 0
Fike 28.12.2022 17:18 # 0
guest6 17.08.2024 23:16 # 0