Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2025, 05:01   #1
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию Старая песня о главном!!!

Приветствую Друзья!!!

Наконец-то я нашел литературу(с русским переводом) по созданию БД на PyQt6. PyQt6 для начинающих (Практический подход к графических интерфейсов с PyQt6). Автор Джошуа М. Уиллман.

И вот опять я столкнулся со старой ошибкой....
Цитата:
Process finished with exit code -1073741819 (0xC0000005)
И что только я смотрел точки останова, закомментировал оператор выбора If... Then... , на папку ге находится файл проекты открыл дал права Администратора (Вообщем танцы с бубном не танцевал).

Ниже я выкладываю листинг и файл с проектом cделанный на моем любимом PyCharm
Код:
# Импорт необходимых модулей
import sys, random
import sqlite3
from PyQt6.QtSql import QSqlDatabase, QSqlQuery

class CreateEmployeeData:
    """Создаём пример базы данных для проекта
    Класс демонстрирует как подключаться к базе данных, создавать
    запросы, создавать таблицы и записи в этих таблицах"""
    # Создаём соединение с базой данных. Если файл db
    # не существует, будет создан новый файл db
    # Использовать драйвер SQLite версии 3
    #faulthandler.enable()
    database = QSqlDatabase.addDatabase("QSQLITE")
    database.setDatabaseName("accounts.db")
    if not database.open():
        print("Невозможно открыть файл источника данных")
        sys.exit(1) # Код ошибки 1 - означает ошибку

    # create database
    query = QSqlQuery()
    # Стирание содержимого базы данных
    query.exec("DROP TABLE accounts")
    query.exec("DROP TABLE countries")

    query.exec("""CREATE TABLE accounts (
        id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NULL,
        employee_id INTEGER NOT NULL,
        first_name VARCHAR(30) NOT NULL,
        last_name VARCHAR(30) NOT NULL,
        email VARCHAR(40) NOT NULL,
        department VARCHAR(20) NOT NULL,
        country_id VARCHAR(20) REFERENCES countries(id))""")

    # Позиционная привязка для вставки записей в базу данных
    query.prepare("""INSERT INTO accounts(
              amployee_id, first_name, last_name, 
              email, department, country_id)
              VALUES (?, ?, ?, ?, ?, ?)""")
    first_name = ["Emma", "Olivia", "Ava", "Isabella",
                  "Mia", "Charlotte", "Amelia", "Abigail",
                  "Valorie", "Teesha", "Jazzmin", "Liam",
                  "Noah", "William", "James", "Logan",
                  "Benjamin", "Mason", "Elajah", "Oliver",
                  "Lucas", "Michael"]
    last_name = ["Smith", "Johnson", "Williams", "Brown",
                 "Jones", "Miller", "Davis", "Rodriguez",
                 "Martinez", "Hernandez", "Lopez", "Gonzalez",
                 "Wilson", "Anderson", "Thomas", "Taylor",
                 "Moore", "Jackson", "Martin", "Lee",
                 "Perez", "Thompson", "White", "Harris"]

    # Создайте данные для первой таблицы
    employee_ids = random.sample(
        range(1000, 2500), len(first_name))
    countries = {"USA":1, "India":2, "China":3,
                 "France":4, "United Kingdom":5, "Germany":6}

    country_names = list(countries.keys())
    country_codes = list(countries.values())
    departments = ["Production", "R&D", "Marketing", "HR",
                   "Finance", "Engineering", "Managerial"]

    for f_name in first_name:
        l_name = last_name.pop()
        email = (l_name + f_name[0].lower() + "@job.com")
        country_id = random.choice(country_codes)
        dept = random.choice(departments)
        employee_id = employee_ids.pop()
        query.addBindValue(employee_id)
        query.addBindValue(f_name)
        query.addBindValue(l_name)
        query.addBindValue(email)
        query.addBindValue(dept)
        query.addBindValue(country_id)
        query.exec()
    # создайте данные для второй таблицы
    country_query = QSqlQuery()
    country_query.exec("""CREATE TABLE countries (
    id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NULL,
    country VARCHAR(20) NOT NULL)""")

    country_query.prepare(
        """INSERT INTO countries(country) VALUES (?)""")

    for name in country_names:
        country_query.addBindValue(name)
        country_query.exec()

    print("[NFO] Database succesfully created")

if __name__ == '__main__':
    CreateEmployeeData()
    sys.exit(0)
Crete_Database.rar
с Уважением Ким Евгений

Последний раз редактировалось mikkijon; 03.03.2025 в 05:05.
mikkijon вне форума Ответить с цитированием
Старый 03.03.2025, 06:56   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Если бы вы видели сообщения об ошибках, то было бы легче искать (найдите всё-таки как PyCharm заставить их показывать). Сообщение как и в прошлый раз "QSqlDatabase requires a QCoreApplication". Добавьте в начало кода:
Код:
import sys, random
from PyQt6.QtCore import QCoreApplication
from PyQt6.QtSql import QSqlDatabase, QSqlQuery

app = QCoreApplication(sys.argv)

class CreateEmployeeData:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.03.2025, 07:57   #3
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию

Огромное Спасибо!!!
В книге почему то не сказано .... про этот модуль. Я думал это большого значение не имеет!
с Уважением Ким Евгений
mikkijon вне форума Ответить с цитированием
Старый 03.03.2025, 15:01   #4
mikkijon
Пользователь
 
Регистрация: 03.10.2019
Сообщений: 28
По умолчанию

Подскажите пожалуйста почему записи не вносятся в таблицу
с Уважением Ким Евгений
mikkijon вне форума Ответить с цитированием
Старый 03.03.2025, 20:07   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Из-за опечатки - нужно employee_id вместо amployee_id в query.prepare.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Песня крутая vinniepooh Свободное общение 0 09.01.2021 19:37
Старая песня об активации MDI Child на новый лад 8alig8 Общие вопросы Delphi 3 11.08.2015 15:40
Старая borland c 3.1 monster-bonster Общие вопросы C/C++ 3 17.02.2013 13:08
Чья это песня? Stilet Свободное общение 21 24.10.2010 14:42