Задать вопрос
@AleksandrFl

Как сделать локальную базу данных для android studio и сразу заполнить ее данными из csv или xml?

Как сделать локальную базу данных для android studio и сразу заполнить ее данными из csv или xml?
  • Вопрос задан
  • 326 просмотров
Подписаться 2 Простой 3 комментария
Решения вопроса 1
@AleksandrFl Автор вопроса
Установить Python, PyCharm (триал версию). создать там проект, перекинуть туда этот файл:
href=https://yadi.sk/d/A6_iVd1QY5HdRA
выставить кодировку
5f64dcd9845d9500511561.jpeg
затем, во вкладке Database создать базу данных SQlite (или открыть файл .db другой базы данных), правой кнопкой мыши импортировать файл csv, который уже в кодировке и сделать, как на изображении ниже
5f64de034da78760910338.jpeg
и все, заполненная база данных готова,
5f64dedd0de56460393107.jpeg
обязательно прописываем id (создаем поле в каждой таблице) с autoincrement и Primary Key (PK)
так же можно сделать связи (автоматически создаст таблицу)
пример связывания таблицы один ко многим.
1. создаем таблицу phone_test, прописываем id (autoincrement, PK)
5f64dffcddaca577178729.jpeg
2. переходим в первую таблицу и модифицируем колонку home_telephone
должно получиться так:
5f64e0db8b837598285187.jpeg
все, две таблицы связаны, во вкладке консоль прописываем тестовый запрос
5f64e1768dcce565953036.jpeg
пример запроса Foreign Key Один ко многим
SELECT pt.id, pt.phone, pt.column_2 FROM TemplateImportEmpl LEFT JOIN phone_test pt on pt.id = TemplateImportEmpl.home_telephone

видим результат
5f64e211e7cd2954844133.jpeg

Если надо сделать из сложного XML файла таблицу CSV для любой базы данных.
допустим есть такой XML файл и надо сделать таблицу CSV
<?xml version="1.0" encoding="UTF-8"?>
<services>
    <strategy odn="149" name="kv" date="2020-11-18">
        <post>eVoting Booth</post>
        <inf>
            <tag id="10" er="er1"/>
            <tag id="14" er="er1"/>
            <tag id="11" er="er2"/>
            <tag id="12" er="er3"/>
            <tag id="13" er="er4"/>
        </inf>
    </strategy>
    <strategy odn="150" name="vk" >
        <post>Library</post>
        <inf>
            <tag id="10" er="er1"/>
            <tag id="13" er="er4"/>
        </inf>
    </strategy>
</services>


вот код для создания таблицы с вытаскиванием тегов и заполнением пропусков в XML
from lxml import etree

import pandas as pd


trree = etree.parse("input_file.xml")

table = trree.xpath('/services/strategy/inf/tag')
tableoutput = []
for i in table:
    ig = i.xpath('./@er') #доступ к тегам и распечатка тегов, доступ к post
    tableoutput+= ig
print("поля в будущей таблице: ", set(tableoutput), "сменить таблицу (экс)")

id = []
counttag = 0
minsec = []
minseccel = []
counter1musttwo = []
tagnull = []
identifie = trree.xpath('/services/strategy/inf')
for c in identifie:
    counttag +=1
    ct = c.xpath('./tag')
    print ("количество тегов в",counttag, "inf: ", len(ct))
    if (len(ct) == 0):
        tagnull += "TAG = 0; inf №", counttag
        print("найден inf с Количеством тегов = 0")
    for c1 in ct:
        ct1 = c1.xpath('./@er')
        ct2 = c1.xpath('./@id')
        print("распечатываем er: ", ct1)
        if (ct1 == ['er1']):
            id += ct2
        minsec += ct1
        minseccel += ct1
    print("кол-во er1 в",counttag, "inf: ", minsec.count("er1"))
    if (minsec.count("er1") >= 2):
        counter1musttwo += "er1 > 2; inf №",counttag, "; кол-во er1", minsec.count("er1")
        print("найден inf с er1 больше 2")
    print("   \n ")
    minsec = []

identifie = trree.xpath('/services/strategy')
for re in identifie:
    reos = re.xpath('./post/text()')
    print("доступ к post", reos)
#выше мы подсчитали все элементы tag
#делаем пример таблицы csv если каких то полей не хватает поле дата не постоянно
print("\n")
strategy = trree.xpath('/services/strategy')
squares = []
for rv in strategy:
    noner = rv.xpath('./@date')

    if (noner == []):
        noner = ['not found']
    squares += noner
print(squares)
postoutput = []
for re in strategy:
    reos = re.xpath('./post/text()')
    if (reos == []):
        reos = ['not found']
    postoutput+= reos
print(postoutput)

id = trree.xpath('/services/strategy/@odn')
name = trree.xpath('/services/strategy/@name')

df = pd.DataFrame({
    "Id": id,
    "Name": name,
    "Data": squares,
    "Post": postoutput
})

df.to_csv("out.csv", sep="|", index=None)
#файл готов


в консоле:
5f64f695eaca5139083672.jpeg
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Дэвид Гриффитс, Дон Гриффитс - Head First Программирование для Android, глава 11.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы