我想在Linux上的Python脚本中执行MySQL查询source FileName.sql
。
我可以执行其他查询,例如SELECT * FROM table_name
,但是这个查询会出错。我在使用Python的MySQL数据库的Linux服务器上执行此操作。我使用的前端是Putty。
我使用的Python脚本是:
import MySQLdb
db = MySQLdb.connect("hostname","username","pswrd","dbname")
cursor = db.cursor()
cursor.execute("source FileName.sql")
db.close()
如何在此文件的位置执行查询source FileName.sql
> FileName.sql
位于?
答案 0 :(得分:2)
source
不是SQL命令。它是一个MySQL CLI命令,它只存在于控制台应用程序mysql
中(以及其他任何实现的地方)。它只是读取FileName.sql的内容并在其中发出SQL命令。
要在python中执行此操作,您可以使用类似
的内容编辑:假设您每行有1个查询!如果您有多行查询,则必须找到从文件中提取每个查询的方法。
import MySQLdb
db = MySQLdb.connect("hostname","user","pass","db")
cursor = db.cursor()
for line in open("FileName.sql"):
cursor.execute(line)
db.close()
答案 1 :(得分:1)
您可以使用Python执行bash命令并导入SQL文件。
此示例适用于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
如果您的SQL文件创建了数据库,请删除数据库名称。
来源:
https://docs.python.org/3/library/subprocess.html#popen-constructor https://dev.mysql.com/doc/refman/8.0/en/mysql-batch-commands.html
答案 2 :(得分:0)
相同的代码段:
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()