#sql #python-3.x #tweepy #executemany
#sql #python-3.x #tweepy #executemany
Вопрос:
Я пытаюсь загрузить твиты из списка из трех разных учетных записей, а затем сохранить всю информацию в базе данных SQL3.
Я пробовал использовать приведенный ниже код, но, похоже, он работает вечно. Я что-то упустил? Это потому, что я использовал .executemany() вместо .execute()?
step=0
a_list=["A","B","C"]
for s in a_list:
cursor = tweepy.Cursor(api1.user_timeline, id = s, tweet_mode='extended').items(3189)
for tweet in cursor:
tw_text.append(tweet.full_text)
created_at.append(tweet.created_at)
rtws.append(tweet.retweet_count)
favs.append(tweet.favorite_count)
for h in tweet.entities['hashtags']:
hashlist.append(h['text'])
for u in tweet.entities['urls']:
linklist.append(u['expanded_url'])
try:
medialist.append(media['media_url'] for media in tweet.entities['media'])
except:
pass
step =1
print('step {} completed'.format(step))
#preparing all the data for .executemany()
g = [(s,tw,crea,rt,fv,ha,li,me) for s in ['GameOfThrones'] for tw in tw_text for crea in created_at for rt in rtws for fv in favs for ha in hashlist for li in linklist for me in medialist]
cur.executemany("INSERT INTO series_data VALUES (?,?,?,?,?,?,?,?)", (g))
con.commit()
print('db updated')
Я ожидаю, что программа запишет таблицу в SQL3, но я никогда не получаю сообщение «обновлено db» (т. Е. Самую последнюю строку print ())
Ответ №1:
cur.executemany() принимает список кортежей. В каждом кортеже будет столько элементов, сколько столбцов, для которых вы хотите вставить значение.
Например, если у вас есть таблица со следующей структурой
create table tbl_test(firstname varchar(20), lastname varchar(20));
и вы хотите вставить в него 3 записи, используя executemany(), ваш объект и вызов должны быть такими
list = [('Hans', 'Muster'), ('John', 'Doe'), ('Jane', 'Doe')]
cur.executemany('insert into tbl_test values(?, ?)', list)