使用MySQLdb选择本地文件

我正在使用MySQLDB Python模块.我有一张名为"测试"的桌子
在"测试"数据库下,很少有列,在遥控器上托管的内容
mysql Server.
我想运行以下查询以获取逗号分隔的信息
从桌子上
锁定表foo阅读;
选择A,B,A+B到Outfile'/tmp/Result.txt'
由''终止''的字段终止
终止" \ n"的线
来自"测试"
解锁桌子;
...查询运行良好,但是我注意到的是 /tmp/result.txt
是在MySQLD运行机上本地创建的,但不是在
使用MySQLDB模块的客户端(Python程序).
我想知道之前是否有人经历过并做了一些
安排迭代数据,但获取 /tmp/result.txt
在客户机器上本地生成?
在本地或服务器文件上,来自http://dev.mysql.com/doc/refman/5.0/en/select.html
---
SELECT ...进入Outfile语句主要是为了让您
非常快速将表倒入服务器计算机上的文本文件.如果你
想在某些客户端主机上创建结果文件
服务器主机,您不能使用Select ...进入外档.在这种情况下,您
相反,应该使用mysql -e这样的命令," select ..." file_name
在客户端主机上生成文件.
---
因此,在此类中使用" -e" mySQL命令行选项的等效物是什么
mysqldb python模块?
很抱歉,如果应该只能去MySQL,但不确定
因此,复制相关假设.
谢谢,
Nikhil

# 回答1


尼基尔写道:
不幸的是,尽管有负载数据本地流动,但
在客户端上读取文件,在本地外档中没有选择.
实际上,您可能想关闭文件特权
为您的mysql.阻止加载数据渗透,然后选择
折叠,通常认为是一个好主意,因为这些命令可以
访问任意文件名.
另外,如果您仍在使用锁定桌和解锁表,
阅读InnoDB和交易.
通常,您会做这样的事情:
导入mysqldb
导入CSV
def WritedB(DB,文件名):
尝试 :
OUTCSV = CSV.WRITER(FILENAME)#CSV的输出对象
光标= db.cursor()cursor.execute("从测试中选择a,b,a+b")
而true:#做所有行
行= cursor.fetchone()#获取一行元组
如果行没有:#如果行的结尾
休息#完成
OUTCSV.WRITEROW(ROW)#以CSV格式写入行
db.commit()#释放锁
除了mysqldb.operationalerror,消息:
打印"数据库故障:",消息#处理所有数据库问题
提高#reraise例外
主机名=" ???" #适当填写
用户=" ???"
密码=" ???"
db = mysqldb.connect(主机=主机名,#打开数据库
user =用户名,passwd =密码,db = databasename)
WritedB(db,'/tmp/result.txt')#做
===============
请注意,这是面向ASCII的;如果您Unicode,您需要
额外的参数到"连接".另外,CSV模块不做
UNICODE既定.确保" OUTCSV"对象
尝试阅读之前,请删除范围 文件,所以
文件被冲洗并关闭.
约翰·纳格(John Nagle)
# 回答2


约翰·纳格尔(John Nagle)写道:
不幸的是,尽管有负载数据本地流动,但
在客户端上读取文件,在本地外档中没有选择.
实际上,您可能想关闭文件特权
为您的mysql.阻止加载数据渗透,然后选择
折叠,通常认为是一个好主意,因为这些命令可以
访问任意文件名.
另外,如果您仍在使用锁定桌和解锁表,
阅读InnoDB和交易.
通常,您会做这样的事情:
导入mysqldb
导入CSV
def WritedB(DB,文件名):
尝试 :
OUTCSV = CSV.WRITER(FILENAME)#CSV的输出对象
光标= db.cursor()
cursor.execute("从测试中选择A,B,A+B")
而true:#做所有行
行= cursor.fetchone()#获取一行元组
如果行没有:#如果行的结尾
休息#完成
OUTCSV.WRITEROW(ROW)#以CSV格式写入行
db.commit()#释放锁
除了mysqldb.operationalerror,消息:
打印"数据库故障:",消息#处理所有数据库问题
提高#reraise例外
主机名=" ???" #适当填写
用户=" ???"
密码=" ???"
db = mysqldb.connect(主机=主机名,#打开数据库
user =用户名,passwd =密码,db = databasename)
WritedB(db,'/tmp/result.txt')#做
===============
请注意,这是面向ASCII的;如果您Unicode,您需要
额外的参数到"连接".另外,CSV模块不做
UNICODE既定.确保" OUTCSV"对象
在尝试读取文件之前,请删除范围,因此
文件被冲洗并关闭.
约翰·纳格尔(John Nagle)
谢谢约翰.那是一个有用的技巧.
问候,
Nikhil

标签: python

添加新评论