Python получает слова из текстового файла и пишет в sqlite3 db - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть текстовый файл со словами в строке, например:

One Two Three

Four Five Six

Мне нужно получить каждое слово вотдельный столбец базы данных.

Я до сих пор придумал этот код:

connection = sqlite3.connect("test.db")
    cursor = connection.cursor()
    sql_command = """CREATE TABLE IF NOT EXISTS test (
    id VARCHAR(20),
    second VARCHAR(20),
    third VARCHAR(20),
    fourth VARCHAR(20));"""

    cursor.execute(sql_command)
    query = "INSERT INTO test VALUES (NULL,?,?,?)"
    filename = open("test.txt", "r")
    with open("test.txt", "r") as filename:
       for data in filename:
          line = data.split()
          print(line)
          cursor.execute(query, data.split(' '))

    connection.commit()
    connection.close()

Я получаю следующее сообщение об ошибке:

Incorrect number of bindings supplied. The current statement uses 3, and there are 1 supplied.

Если я изменю код на:

query = "INSERT INTO test VALUES (NULL,?,NULL,NULL)"

, вся строка записывается в БД:

1|One Two Three||

2|Four Five Six||

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Хорошо, я нашел решение.

Тгикал был прав.Извините, я не увидел ваш комментарий.

        with open("test.txt", "r") as filename:
        for data in filename:
            line = data.split()
            print(line)
            cursor.execute(query, line)

Спасибо всем за помощь.

0 голосов
/ 28 февраля 2019

Мне пришлось написать следующее для тестирования и генерации данных:

import sqlite3, os

with open("test.txt", "w") as txt:
  for i in range(10):
  txt.write("One Two Three\n")    

if not os.path.exists("test.db"):
  connection = sqlite3.connect("test.db")
else:
  os.remove("test.db")
  connection = sqlite3.connect("test.db")

Вы не перебирали строки в текстовом файле.Следующее хорошо:

cursor = connection.cursor()
sql_command = """CREATE TABLE IF NOT EXISTS test (
id VARCHAR(20),
second VARCHAR(20),
third VARCHAR(20),
fourth VARCHAR(20));"""

cursor.execute(sql_command)
query = "INSERT INTO test VALUES (NULL,?,?,?)"

Но для чтения / записи вам нужно внести изменения, подобные этим, чтобы перебирать строки:

with open("test.txt", "r") as filename:
  for data in filename:
    line = data.split()
    print(line)
    if len(line) == 3:
        cursor.execute(query, data.split())

connection.commit()
connection.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...