Python/MySQL - Export CSV file from DB - python

I am trying to export a database report in csv, but when generating a new report with new data entered, it does not update when generating.
I created a button to execute the function.
Following is the code below:
import pymysql
from pymysql import InternalError
from pathlib import Path
from tkinter import *
tess = Tk()
tess.title("tess")
def exp_rel_emp():
conn = pymysql.connect(host="localhost", port=3306, user="root", password="", db="omnia")
print("connect sucessfull!")
try:
with conn:
statm = "SELECT * FROM omniacademp INTO OUTFILE '/TEMP/CadastroEmpresas.CSV' FIELDS TERMINATED BY ';' ENCLOSED BY ''"
cursor = conn.cursor()
with cursor:
cursor.execute(statm)
results = cursor.fetchone()
print(results)
except InternalError:
Path('/TEMP/CadastroEmpresas.CSV').touch()
finally:
conn.close()
print("MySQL connection is closed")
bt = Button(tess, text="tess", command=exp_rel_emp)
bt.place(x=10, y=10)
tess.mainloop()

Related

Python with psycopg2 and pgAdmin4 how can i retrieve bytea data

I have uploaded a jpg image with the bytes() function to the bytea field.
INSERT CODE
conn = None
try:
# read data from a picture
imagen = open("imagen.jpg", "rb").read()
# connect to the PostgresQL database
conn = psycopg2.connect(host="localhost", database="test", user="postgres", password="admin")
# create a new cursor object
cur = conn.cursor()
# execute the INSERT statement
cur.execute("INSERT INTO nuevotest(id,data) " +
"VALUES(%s,%s)",
(1, bytes(imagen)))
# commit the changes to the database
conn.commit()
# close the communication with the PostgresQL database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
SELECT CODE:
conn = None
try:
conn = psycopg2.connect(host="localhost", database="test", user="postgres", password="admin")
# create a new cursor object
cur = conn.cursor()
# execute the INSERT statement
cur.execute(""" SELECT data
FROM nuevotest
WHERE id=1 """,
)
# commit the changes to the database
conn.commit()
imagen = cur.fetchall()
print(type(imagen))
print(imagen)
# close the communication with the PostgresQL database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
But what i was expectiong was a list or tuple with the byte code, not this:
PyCharm console with a (memory direction? idk)
I have no idea how to work with that.
Depends on what you are planning on doing after you retrieve the data. As #adrian_klaver said, you can use a buffer to write the output. Like this you would send it to a file:
with open(your_output_file, 'wb') as im:
im.write(the_in_memory_data)
Using PIL you can output it to the image viewer of the system without saving it.

Parse and Insert XML file to SQL Database

So i want to store my XML data to database using python connector to mysql.
import mysql.connector
from getpass import getpass
from mysql.connector import connect, Error
import xml.etree.ElementTree as ET
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="results"
)
if mydb:
print ("Connected Successfully")
else:
print ("Connection Not Established")
tree = ET.parse('report.xml')
res = tree.findall('entry')
for test in res:
name = test.find('name').text
verdict = test.find.int('verdict').text
description = test.find('description').text
report = """INSERT INTO test_executions (name,verdict,description)
VALUES(%s,%s,%s)"""
cursor = mydb.cursor()
cursor.execute(report,(name,verdict,description))
mydb.commit()
print("Data inserted successfully.")
print(mycursor.rowcount, "record inserted.")
I already have this code but everytime i run it, it never go through the for loop and commit the insertion to my DB. Is there something wrong with the code?

How put db connection in seperate file and use in another file in python

Hi i have problem regarding db connection. i want to put db connection in seprate file and can use in multiple files.
i have tried this
connection.py
import pymysql
import mysql.connector
class Connection:
def __init__(self):
conn = mysql.connector.connect(host="localhost", user="root", password="", db="")
cur = conn.cursor()
return cur, conn
main.py
import connection
cur, conn = connection.Connection()
Error
cur, conn = connection.Connection()
TypeError: __init__() should return None, not 'tuple'
connection.py
import pymysql
import mysql.connector
def get_connection():
conn = mysql.connector.connect(host="localhost", user="root", password="", db="")
cur = conn.cursor()
return cur, conn
main.py
import connection
cur, conn = connection.get_connection()

How to connect MySQL workbench with from shell using Python?

I have database in MySQL workbench and I'm running Python code from shell to connect to my database.
But I am unable to import mysql.connector or mysqlDb (got this suggestion from w3school). So I am unable to connect to my database.
I think the question does not concern connecting with Putty, but more about importing mysql.connector in your python script.
"But I am unable to import mysql.connector or mysqlDb ( got this suggestion form w3school)"
--It will be easier to help you if your code is attached to your post.
import mysql.connector
cnx = mysql.connector.connect(########)
think this scrap of code will be helpful."Loading file from Oracle"
def load_file(DT):
ip = ######
port = #####
service_name = '#####'
dsn = cx_Oracle.makedsn(ip, port, service_name=service_name)
t = datetime.now().strftime("%Y%m%d%H%M%S")
SQL = "select name...."
fn = "/root/..." + t + ".csv"
fn_tmp = "/root/.." + t + ".csv"
FILE = open(fn_tmp, "w")
FILE.write(
'name...;' + '\n')
out = csv.writer(FILE, delimiter=';')
logging.info("Database connect " + t)
try:
conn = cx_Oracle.connect('####', '###', dsn)
cur = conn.cursor()
cur.execute(SQL)
except cx_Oracle.DatabaseError, exc:
conn = None
error, = exc.args
logging.error(
"Oracle connection problem Error Code:{0}".format(str(error).decode("####",
"ignore").encode("utf-8",
"ignore"))
)
for row in cur:
out.writerow(localize_floats(row))
logging.info("Database disconnect " + t)
try:
cur.close()
conn.close()
except cx_Oracle.DatabaseError, exc:
error, = exc.argsgv[0]
logging.error("Oracle-Error-Code:{0}".format(str(error).decode("####",
"ignore").encode("utf-8",
"ignore"))
)
FILE.close()
os.rename(fn_tmp, fn)
An option that you can try is to use pymysql. More info here. A code snippet is the following:
import pymysql.cursors
connection = pymysql.connect(host='IP',
port=3306,
user='user',
password='pass',
db='database',
charset='utf8mb4',
autocommit=True,
cursorclass=pymysql.cursors.DictCursor)
with connection.cursor() as cursor:
query = 'Your query'
cursor.execute(query)
connection.close()

PYTHON MYSQL doesn't work second time

Am receiving json data (from an other python script) to put inside MYSQL database, the code work fine the first time but the second time I got this error:
raise errors.OperationalError("MySQL Connection not available.")
mysql.connector.errors.OperationalError: MySQL Connection not available.
For troubleshooting am sending always the same data, but it still write an error the second time.
I tried also from information found on furums to place : cur = mydb.cursor() at diferents places but I have never been able to get this code work the second time.
There is my code :
import mysql.connector
import json
mydb = mysql.connector.connect(
host="localhost",
user="***",
passwd="***",
database="***"
)
def DATA_REPARTITION(Topic, jsonData):
if Topic == "test":
#print ("Start")
INSERT_DEBIT(jsonData)
def INSERT_DEBIT(jsonData):
cur = mydb.cursor()
#Read json from MQTT
print("Start read data to insert")
json_Dict = json.loads(jsonData)
debit = json_Dict['debit']
print("I send")
print(debit)
#Insert into DB Table
sql = ("INSERT INTO debit (data_debit) VALUES (%s)")
val=debit,
cur.execute(sql,val)
mydb.commit()
print(cur.rowcount, "record inserted.")
cur.close()
mydb.close()
Thanks for your help!
You only open your database connection once, at the start of the script, and you close that connection after making the first insert. Hence, second and subsequent inserts are failing. You should create a helper function which returns a database connection, and then call it each time you want to do DML:
def getConnection():
mydb = mysql.connector.connect(
host="localhost",
user="***",
passwd="***",
database="***")
return mydb
def INSERT_DEBIT(jsonData):
mydb = getConnection()
cur = mydb.cursor()
# Read json from MQTT
# rest of your code here...
cur.close()
mydb.close()

Categories