如何在python脚本中执行“source FileName.sql”?

时间:2015-02-23 07:04:16

标签: python mysql mysql-python

我想在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位于?

3 个答案:

答案 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)

  1. 使用“;”分隔python中SQL文件中的脚本。作为分隔符
  2. 迭代执行每个命令。
  3. awesome5team在https://github.com/awesome5team/General-Resources-Box/issues/7中开发了一个不错的解决方案

相同的代码段:

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()
相关问题