How can I execute "source FileName.sql" in a python script?
Solution 1
source
is not a SQL command. It's a MySQL CLI command, it only exists in the console application mysql
(and wherever else implemented). All it does is to read the contents of FileName.sql and issue the SQL commands inside.
To do this in python, you can use something like
Edit: This assumes you have 1 query per line! If you have multi-line queries, you'll have to find the means to extract each query from the file.
import MySQLdb
db = MySQLdb.connect("hostname","user","pass","db")
cursor = db.cursor()
for line in open("FileName.sql"):
cursor.execute(line)
db.close()
Solution 2
You can execute a bash command with Python and import your SQL file.
This exemple is for MySQL
import subprocess
command = "mysql -u username --password=p@55W0rD database_name < file.sql".split()
p = subprocess.Popen(command, stdout=subprocess.PIPE)
p.communicate() # you can see if errors are returned
if your SQL file creates a database, remove database_name.
sources:
https://docs.python.org/3/library/subprocess.html#popen-constructor https://dev.mysql.com/doc/refman/8.0/en/mysql-batch-commands.html
Solution 3
- Separate the scripts in SQL file in python using ";" as delimiter
- Execute each command iteratively.
- awesome5team had developed a nice solution in https://github.com/awesome5team/General-Resources-Box/issues/7
Code snippet from the same:
import mysql.connector
cnx = mysql.connector.connect(user='root',
password='YOUR-PASSWORD-FOR-MYSQL',
host='localhost',
database='YOUR-DATABASE-NAME')
cursor =cnx.cursor()
def executeScriptsFromFile(filename):
fd = open(filename, 'r')
sqlFile = fd.read()
fd.close()
sqlCommands = sqlFile.split(';')
for command in sqlCommands:
try:
if command.strip() != '':
cursor.execute(command)
except IOError, msg:
print "Command skipped: ", msg
executeScriptsFromFile('SQL-FILE-LOCATION')
cnx.commit()
Yamini Gera
Updated on June 14, 2022Comments
-
Yamini Gera almost 2 years
I would like to execute the MySQL query
source FileName.sql
in a Python script on Linux.I am able to execute other queries like
SELECT * FROM table_name
but this one is giving an error. I am executing this on a Linux server with a MySQL database using Python. The frontend I am using is Putty.The Python script I have used is:
import MySQLdb db = MySQLdb.connect("hostname","username","pswrd","dbname") cursor = db.cursor() cursor.execute("source FileName.sql") db.close()
How can I execute the query
source FileName.sql
on the location where this file->FileName.sql
is located? -
Yamini Gera about 9 yearsits giving below error: File "test6.py", line 5, in <module> cursor.execute(line) File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute self.errorhandler(self, exc, value) File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler raise errorclass, errorvalue _mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/*' at line 1") root@ubuntu:/#
-
Iskren about 9 yearsI've added a comment in the answer, see above. Also, if you have any external commands for the
mysql
CLI tool it won't work.