Подскажите, почему не получается записать(на 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 ...
Вероятно, нет вызова commit()
, поэтому в базу ничего не попадает.
P.S. Пишите сначала примерчик на 5-10 строчек...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть таблица с текстовым полем, содержащим ссылкиВ разных строках таблицы эти ссылки произвольной длины
Выполняем запрос: SELECT id, name, rank FROM table ORDER BY rank DESC, id DESC Мне нужно получить позицию в этой выдаче строки с фиксированным id (например id=50)Как это...
помогите решить проблемуНе знаю в какую сторону капать