Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 28, 2021 16:03:51

Adelring
Зарегистрирован: 2021-06-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Mariadb, вставка множества.

Добрый день всем. Не смог найти в документации как выполнить вставку типа ‘set’ с использованием mariaDB. Для mysql код выглядит так:

 conn = mysql.connector.connect(**dbconfig)
cursor = conn.cursor()
_sql = """insert into db 
    (p, l, ip, browser_string, results)
    values
    (%s,%s,%s,%s,%s)"""
cursor.execute(_sql, (req.form['p'], req.form['l], req.remote_addr, req.user_agent.browser, res, ))

Попробовал переписать под mariaDB:
    import mariadb
   conn = mariadb.connect(user="user",
                           password="password",
                           host="localhost",
                           database="DB")
    cursor = conn.cursor()
    try:
        cursor.executemany("INSERT INTO log (p,l,ip,browser_string,results) VALUES (?,?,?,?,?)",
                   (request.form['p'],
                    request.form['l'],
                    request.remote_addr,
                    request.user_agent.browser,
                    res,))
    except mariadb.Error as e:
        print(f"Error: {e}")
Получаю ошибку, что тип множеств не поддерживается mariadb. Я не смог в документации найти способ решить эту задачу.

Офлайн

#2 Июнь 29, 2021 00:31:14

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7901
Репутация: +  552  -
Профиль   Отправить e-mail  

Mariadb, вставка множества.

Adelring
как выполнить вставку типа ‘set’ с использованием mariaDB.
Никак. Нет такого типа в реляционных СУБД



Офлайн

#3 Июнь 29, 2021 00:32:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 7953
Репутация: +  727  -
Профиль   Отправить e-mail  

Mariadb, вставка множества.

Adelring
Для mysql код выглядит так:
Ты там кавычку не закрыл.

Adelring
Получаю ошибку, что тип множеств не поддерживается mariadb. Я не смог в документации найти способ решить эту задачу.
Первый пример показывает, что там всё аналогично
https://mariadb-corporation.github.io/mariadb-connector-python/usage.html#connecting

У тебя с чего-то вдруг .executemany() используется.



Отредактировано py.user.next (Июнь 29, 2021 00:32:36)

Офлайн

#4 Июнь 30, 2021 16:08:22

Adelring
Зарегистрирован: 2021-06-28
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Mariadb, вставка множества.

py.user.next
Первый пример показывает, что там всё аналогично
Используя документацию, сделал так:
 def log_request(req:'flask_request',res:str) -> None:
    import mariadb
    conn = mariadb.connect(user="user",
                           password="passwd",
                           host="localhost",
                           database="logDB")
    cursor = conn.cursor()
    phrase = request.form['p']
    letters = request.form['l']
    sql = "INSERT INTO log(p,l,ip,browser_string,results) VALUES (
    data = (p,l,req.remote_addr,req.user_agent.browser,res,)
    try:
        cursor.execute(sql,data)
    except mariadb.Error as e:
        print(f"Error: {e}")
    conn.commit()
    cursor.close()
    conn.close()
Ошибка заключалась в том, что функция, которая возвращала результат для аргумента ‘res’, возвращает тип set. После приведения её к str функция отработала как надо, на сколько я вижу по выводу БД.
 id | ts                  | phrase                           | letters | ip        | browser_string | results              |
+----+---------------------+----------------------------------+---------+-----------+----------------+----------------------+
|  2 | 2021-06-30 15:48:14 | galaxy                           | aeiou   | 127.0.0.1 | firefox        | {'a'}                |
|  3 | 2021-06-30 15:50:23 | life,the universe,and everything | aeiou   | 127.0.0.1 | firefox        | {'a', 'e', 'u', 'i'} |
+----+---------------------+----------------------------------+---------+-----------+----------------+----------------------+

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version