Can’t find any ideas for using functions to print data from mysql… here is a solution to the problem.
Can’t find any ideas for using functions to print data from mysql
I created a script in Python that is able to collect data from web pages and store it in MySQL
. However, when the data is properly inserted into mysql
, my script can print them in the console.
My question is: how to wrap the following three lines in a separate function and print data from storage?
mycursor.execute("SELECT * FROM webdata")
for item in mycursor.fetchall():
print(item)
My full script:
import mysql.connector
from bs4 import BeautifulSoup
import requests
URL = "https://www.tripadvisor.com.au/Restaurants-g255068-c8-Brisbane_Brisbane_Region_Queensland.html"
def get_info(link):
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd = "123",
database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("DROP TABLE if exists webdata")
mycursor.execute("CREATE TABLE if not exists webdata (name VARCHAR(255), bubble VARCHAR(255), review VARCHAR(255))")
response = requests.get(link)
soup = BeautifulSoup(response.text,"lxml")
for items in soup.find_all(class_="shortSellDetails"):
name = items.find(class_="property_title").get_text(strip=True)
bubble = items.find(class_="ui_bubble_rating").get("alt")
review = items.find(class_="reviewCount").get_text(strip=True)
mycursor.execute("INSERT INTO webdata (name,bubble,review) VALUES (%s,%s,%s)",(name,bubble,review))
mydb.commit()
#I wish to use the follwing three lines within another function to do the same
mycursor.execute("SELECT * FROM webdata")
for item in mycursor.fetchall():
print(item)
if __name__ == '__main__':
get_info(URL)
Solution
My comment is to describe this changed code:
import mysql.connector
from bs4 import BeautifulSoup
import requests
# This is a new function
def do_fetch (cursor):
cursor.execute("SELECT * FROM webdata")
for item in cursor.fetchall():
print(item)
URL = "https://www.tripadvisor.com.au/Restaurants-g255068-c8-Brisbane_Brisbane_Region_Queensland.html"
def get_info(link):
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd = "123",
database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("DROP TABLE if exists webdata")
mycursor.execute("CREATE TABLE if not exists webdata (name VARCHAR(255), bubble VARCHAR(255), review VARCHAR(255))")
response = requests.get(link)
soup = BeautifulSoup(response.text,"lxml")
for items in soup.find_all(class_="shortSellDetails"):
name = items.find(class_="property_title").get_text(strip=True)
bubble = items.find(class_="ui_bubble_rating").get("alt")
review = items.find(class_="reviewCount").get_text(strip=True)
mycursor.execute("INSERT INTO webdata (name,bubble,review) VALUES (%s,%s,%s)",(name,bubble,review))
mydb.commit()
# This part is changed (moved to new function):
do_fetch (mycursor)
if __name__ == '__main__':
get_info(URL)