首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python脚本中执行“源FileName.sql”?

问如何在python脚本中执行“源FileName.sql”?
EN

Stack Overflow用户
提问于 2015-02-23 07:04:16
回答 3查看 13.4K关注 0票数 3

我想在Linux上的Python中执行MySQL查询source FileName.sql。

我能够执行其他查询,如SELECT * FROM table_name,但这一次出现了错误。我使用Python在带有MySQL数据库的Linux服务器上执行此操作。我使用的前端是Putty。

我使用的Python脚本是:

代码语言:javascript
复制
import MySQLdb
db = MySQLdb.connect("hostname","username","pswrd","dbname")
cursor = db.cursor()
cursor.execute("source FileName.sql")
db.close()

如何在文件-> source FileName.sql所在的位置执行查询FileName.sql?

EN

回答 3

Stack Overflow用户

发布于 2015-02-23 07:15:55

source不是SQL命令。它是一个MySQL CLI命令,它只存在于控制台应用程序mysql (以及其他实现的地方)中。它所做的就是读取FileName.sql的内容并在其中发出SQL命令。

要在python中这样做,您可以使用以下内容

编辑:这假设您每行有一个查询!如果您有多行查询,则必须找到从文件.中提取每个查询的方法。

代码语言:javascript
复制
import MySQLdb
db = MySQLdb.connect("hostname","user","pass","db")
cursor = db.cursor()
for line in open("FileName.sql"):
    cursor.execute(line)
db.close()
票数 4
EN

Stack Overflow用户

发布于 2019-02-14 17:48:03

您可以使用Python执行bash命令并导入SQL文件。

这个例子是针对MySQL的

代码语言:javascript
复制
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文件创建了数据库,请删除database_name。

资料来源:

https://docs.python.org/3/library/subprocess.html#popen-constructor https://dev.mysql.com/doc/refman/8.0/en/mysql-batch-commands.html

票数 2
EN

Stack Overflow用户

发布于 2019-03-26 18:57:58

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

相同的代码片段:

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28668467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档