Не пишет в базу (Python)

170
06 октября 2018, 14:20

Подскажите, почему не получается записать(на python) в базу(mysql) В чем ошибка ?

import json
import os
import sys
import mysql.connector
import datetime
from pprint import pprint

def getdata(path):
    fd = open(path)
    with fd as f:
        data = json.load(f)
    fd.close()
    return data
#не нашел подобие isset(php)
def isset(x):
    if(type(x) == None):
        return 'empty' 
    if(type(x) == bool):
        return x 
    if(len(x)== 0):
        return 'empty'
    else:   
        return x
#проверяю наличае в БД 
def check(cur ,username , channelname):
    query = ("SELECT id FROM user_data where channel_name = %s and user_id = %s" )
    cur.execute(query, (channelname, username))
    rows = cur.fetchall()
    return len(rows)
 #вставляю
def insert(cur, *data):
    ctime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S");
    query = ("INSERT INTO user_data (channel_name, user_id, user_first_name, user_last_name, username, type, verified, role, phone, created_at, updated_at ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s , %s , %s , %s);" )
    cur.execute(query, (data[0], data[1], data[2], 'user_last_name','username', data[3], data[4], data[5], 'phone', ctime , ctime ))
    print(cur)
    return 0

path = sys.argv[1]
if os.path.isfile(path):
    data = getdata(path)
    channelname = path.split(".", 1)
    conn = mysql.connector.connect(
             user='homestead',
             password='secret',
             host='192.168.10.10',
             database='homestead')
    cur = conn.cursor()
    i=0;
    for d in data:
        res = check(cur ,channelname[0], d['user']['id'])
        ctime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S");
        if(res == 0):
                    insert(cur,
                          channelname[0],
                          d['user']['id'],          
                          isset(d['user']['first_name']),
                          isset(d['user']['type']),
                          isset(d['user']['verified']),
                          isset(d['role'])
                          )
    cur.close()
    conn.close()        
else:
    print('file not found') 

Проверка на наличие (Select id from ..) работает, а запись в базу данных нет (def insert()) Подскажите ,правильно ли - передавать в функцию "кортеж", и есть ли другие варианты.

PS:Не нашел аналог isset функции - что-то написал.

Заранее спасибо - надеюсь на Вашу поддержку.

PS:при выполнении в консоле:

>>> import mysql.connector
>>> conn = mysql.connector.connect(
...          user='homestead',
...          password='secret', 
...          host='192.168.10.10',
...          database='homestead')
>>> cur = conn.cursor()
>>> query = ("INSERT INTO user_data (channel_name, user_id, user_first_name, user_last_name, username, type, verified, role, phone, created_at, updated_at ) VALUES ('test', '656586560', 'add','add', 'name', 'type', 1,'sjjs' ,phone , null , null);")
>>> curs = cur.execute(query)
>>> 

не получаю ошибок, и в базу запись не идет.

В mysql данный запрос проходит

mysql> INSERT INTO user_data (channel_name, user_id, user_first_name, user_last_name, username, type, verified, role, phone, created_at, updated_at ) VALUES ('test2', '656586560', 'add','add', 'name', 'user_datatype', 1,'type' ,'phone' , null , null);

Query OK, 1 row affected (0.01 sec)

Предварительно извеняюсь - вчера только начал ковырять python ...

Answer 1

Вероятно, нет вызова commit(), поэтому в базу ничего не попадает.

P.S. Пишите сначала примерчик на 5-10 строчек...

READ ALSO
Как в MySQL правильно искать фразу целиком

Как в MySQL правильно искать фразу целиком

Есть таблица с текстовым полем, содержащим ссылкиВ разных строках таблицы эти ссылки произвольной длины

187
Как получить позицию строки в выдаче MYSQL?

Как получить позицию строки в выдаче MYSQL?

Выполняем запрос: SELECT id, name, rank FROM table ORDER BY rank DESC, id DESC Мне нужно получить позицию в этой выдаче строки с фиксированным id (например id=50)Как это...

180
Mysql workbench внезапно закрылось ubuntu 16.04

Mysql workbench внезапно закрылось ubuntu 16.04

помогите решить проблемуНе знаю в какую сторону капать

158