Найти - Пользователи
Полная версия: Mariadb, вставка множества.
Начало » Базы данных » Mariadb, вставка множества.
1
Adelring
Добрый день всем. Не смог найти в документации как выполнить вставку типа ‘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. Я не смог в документации найти способ решить эту задачу.
FishHook
Adelring
как выполнить вставку типа ‘set’ с использованием mariaDB.
Никак. Нет такого типа в реляционных СУБД
py.user.next
Adelring
Для mysql код выглядит так:
Ты там кавычку не закрыл.

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

У тебя с чего-то вдруг .executemany() используется.
Adelring
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'} |
+----+---------------------+----------------------------------+---------+-----------+----------------+----------------------+
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB