Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212

В SQL базу не добавляется 0, если он стоит первым в строке

18.09.2022, 14:30. Показов 800. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Есть вот такое безумие:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import sqlite3
import random
 
open_db = sqlite3.connect("card.s3db")
modify_db = open_db.cursor()
modify_db.execute("""CREATE TABLE IF NOT EXISTS card (  id INTEGER, 
                                                        number TEXT, 
                                                        pin TEXT, 
                                                        balance INTEGER DEFAULT 0   );""")
 
def open_n_read_db():
 
    modify_db.execute("SELECT id, pin FROM card")
    return {str(i[0]): i[1] for i in modify_db.fetchall()}
 
def write_to_db(account_number, full_card_number, pin, balance):
    
    modify_db.execute(f"INSERT into card VALUES ({account_number}, {full_card_number}, {pin}, {balance})")
    open_db.commit()
 
def creating_account(x):
 
    while True:
 
        issuer_identification_number = "400000"
        customer_account_number = "".join(random.choices([str(i) for i in range(1, 10)], k=9))
        pin = "".join(random.choices([str(i) for i in range(10)], k=4))
        
        if customer_account_number in x:
            continue
        else:
 
            number_to_check = issuer_identification_number + customer_account_number
            luhn1 = [int(number_to_check[i])*2 if i % 2 == 0 else int(number_to_check[i]) for i in range(15)]
            luhn2 = [i - 9 if i > 9 else i for i in luhn1]
 
            if int(str(sum(luhn2))[1]) != 0:
                checksum = str(10 - int(str(sum(luhn2))[1]))
            else:
                checksum = "0"
 
            card_number = issuer_identification_number + "".join(customer_account_number) + checksum
            write_to_db("".join(customer_account_number), card_number, pin, 0)
            break
    
    print("Your card has been created", "Your card number:", card_number, "Your card PIN:", pin, "", sep="\n")
 
def user_account():
    while True:
        print("1. Balance", "2. Log out", "0. Exit", sep="\n")
        user_choice = input()
        if user_choice == "1":
            print("\nBalance: 0\n")
            continue
        elif user_choice == "2":
            print("\nYou have successfully logged out!\n")
            return "log_out"
        elif user_choice == "0":
            print("\Bye!")
            return "exit"
 
def check_login(x):
    while True:
        print("\nEnter your card number:")
        user_input_card = input()
        print("Enter your PIN:")
        user_input_pin = input()
        if user_input_card[6:15] in x and x[user_input_card[6:15]] == user_input_pin:
            print("\nYou have successfully logged in!\n")
            return True
        else:
            print("\nWrong card number or PIN!\n")
            return False
 
while True:
    print("1. Create an account", "2. Log into account", "0. Exit", sep="\n")
    user_choice = input()
 
    if user_choice == "1":
        creating_account(open_n_read_db())
        continue
    elif user_choice == "2":
        if check_login(open_n_read_db()):
            if user_account() == "exit":
                print("Bye!")
                break
            else:
                continue
        else:
            continue
    elif user_choice == "0":
        print("Bye!")
        break
Вопрос в следующем:
программа создаёт pin, начинающийся с 0, а в базу добавляется эта строка без 0, хотя стоит указание в базе, что там текст, т.е. должно добавляться всё.

Наглядно:
Code
1
2
3
4
5
Your card has been created
Your card number:
4000004339539243
Your card PIN:
0474
А в базе:
Code
1
4000004339539243    474
Подскажите, пожалуйста, где я ошибся?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2022, 14:30
Ответы с готовыми решениями:

Если в форме 2 и более строк, в таблицу добавляется только одна, на которой стоит курсор
Есть форма "3_Новая_заявка" В одной заявке может быть несколько материалов. Беда такая, что если в форме 2 и более строк, в таблицу...

Стоит ли переносить базу с 1С на MS SQL
Доброго всем!!! Мы думаем перенести 1С на MS SQL, и хотелось бы узнать плюсы и минусы, и стоит ли переносить. С переносом мы бы решили...

Определить есть ли в матрице строки, максимальный элемент в которых стоит первым в строке
Определить есть ли в действительной матрице В размерности N х M строки, максимальный элемент в которых стоит первым в строке. Если есть, то...

4
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
18.09.2022, 15:17
хе-хе
Просто выведи на печать запрос и посмотри как он выглядит.

Цитата Сообщение от Breathe of fate Посмотреть сообщение
{pin},
Python
1
 '{pin}',
Добавлено через 2 минуты
На самом деле, в sqlite - типы столбцов в большинстве случаев пустая формальность. И бд вертит ими как ей удобно для экономии памяти например. Посему и можно нарваться вот на такие маленькие неочевидности. И это применимо не только к питону, а вообще.

Люди! Будьте бдительны!
(С) Ш. Каретный
0
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
18.09.2022, 16:06  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Просто выведи на печать запрос и посмотри как он выглядит.
Code
1
<sqlite3.Cursor object at 0x00000165053C4540>
Цитата Сообщение от iSmokeJC Посмотреть сообщение
'{pin}'
Оно. Спасибо.

А почему так происходит? Вроде f-string форматирование правильно поставил. Это я неправильно по синтаксису написал как-то при добавлении в БД?
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
18.09.2022, 16:17
Цитата Сообщение от Breathe of fate Посмотреть сообщение
<sqlite3.Cursor object at 0x00000165053C4540>
Да ёпрст.

print(f"INSERT into card VALUES ({account_number}, {full_card_number}, {pin}, {balance})")
и посмотри что на месте пин будет.

Там будет значение без кавычек. Бд думает, что ты туда пытаешься присунуть число. Прежде чем заткнуть число в текстовый столбец, она его таки кастрирует от ведущих нулей.
0
2 / 2 / 0
Регистрация: 29.02.2016
Сообщений: 212
18.09.2022, 22:28  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Бд думает, что ты туда пытаешься присунуть число
И присунула в итоге мне
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.09.2022, 22:28
Помогаю со студенческими работами здесь

Если минимальный элемент матрицы стоит в первой строке, то элементы, стоящие в строке за ним, заменить нулями
Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы стоящие в строке за ним, заменить нулями. Какие...

Если минимальный элемент стоит в первой строке, то все элементы, стоящие в строке за ним, заменить нулями
Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы, стоящие в строке за ним, заменить нулями.написать...

Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы, стоящие в строке за ним, заменить нулями.
Задана матрица С(5,5). Если минимальный элемент стоит в первой строке, то все элементы, стоящие в строке за ним, заменить нулями.

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

Если импортировать базу с Access в SQL Server...
Ребята, чисто для учебных целей. Создал элементарную базу данных и импортировал ее в SQL Server. Есть ли возможность из Access 2000...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru