Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Старая песня о главном!!!  (Прочитано 171 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
mikkijon
Интересующийся

kr
Offline Offline

« : 03-03-2025 02:10 » 

Приветствую Друзья!!!
Наконец-то я нашел литературу(с русским переводом) по созданию БД на 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 (1.7 Кб - загружено 7 раз.)
Записан
mikkijon
Интересующийся

kr
Offline Offline

« Ответ #1 : 03-03-2025 04:53 » 

Вопрос решен спасибо большое!!!!
На до было просто добавить модуль
from PyQt6.QtCore import QCoreApplication

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

kr
Offline Offline

« Ответ #2 : 03-03-2025 12:08 » 

Ребят я поторопился....
Проблема не до конца решена....
Записи в таблицу ACCOUNTS не заносятся.....
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #3 : Вчера в 06:32 » 

Ребят я поторопился....
Проблема не до конца решена....
Записи в таблицу ACCOUNTS не заносятся.....
Добрый день.
1. Чтобы понять что за ошибку, сделайте обработчик ошибок...Как это в Питоне я не знаю, но примерно так
Код:
if(!query.exec(queryStr))
{
   QMessageBox::critical(this, tr("Error!"), query.LastError().text());

   // some cleanup here

   this->close();
}

2. Из того кода, что Вы показали, я вижу одну ошибку:
Код:
CREATE TABLE accounts (
        id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NULL,
        employee_id INTEGER NOT NULL,

в таблице объявлено поле employee_id
а в запросе Вы указываете
Код:
INSERT INTO accounts(
              amployee_id,

ЗЫЖ а зачем Вы оборачиваете строку в строку?
Код:
prepare("""INSERT 
разве нельзя писать
Код:
prepare("INSERT ...")
Записан

I Have Nine Lives You Have One Only
THINK!
mikkijon
Интересующийся

kr
Offline Offline

« Ответ #4 : Вчера в 12:49 » new

так в книге написано....
Я сам не понимаю зачем три апострофа
Записан
mikkijon
Интересующийся

kr
Offline Offline

« Ответ #5 : Вчера в 12:52 » 

спасибо большое HandKot, Вы очень помогли
А не посоветуйте больше книг или статей о СУБД на GUI именно Python
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines