首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ironpython导入mysql数据

如何使用ironpython导入mysql数据
EN

Stack Overflow用户
提问于 2016-04-23 11:12:18
回答 1查看 532关注 0票数 1

我正在寻求帮助,我可以通过ironpython脚本将sql数据导入数据库。

目前我的脚本如下,首先运行这个脚本:

代码语言:javascript
复制
import clr;
import System;

clr.AddReference("TCAdmin.SDK");
from TCAdmin.SDK.Misc import Random;
from System import String;

ThisService.Variables["MySQLUser"] = String.Format("exile_{0}",     ThisService.ServiceId);
ThisService.Variables["MySQLPassword"] = Random.RandomString(10,True,True);
ThisService.Save();

然后,此脚本在以下时间后运行:

代码语言:javascript
复制
import clr;
import System;

clr.AddReference("TCAdmin.DatabaseProviders.MySql");
clr.AddReference("TCAdmin.SDK");
from TCAdmin.DatabaseProviders.MySql import MySqlManager;
from System import String;

mysql_server="localhost";
mysql_root="root";
mysql_password="Password";

with MySqlManager() as mysql:
 escapeduser=mysql.PrepareSqlValue(ThisService.Variables["MySQLUser"]);
 escapedpass=mysql.PrepareSqlValue(ThisService.Variables["MySQLPassword"]);
 mysql.Connect(String.Format("Data Source={0};User Id={1};Password={2};Pooling=False;", mysql_server, mysql_root, mysql_password));

 mysql.ExecuteNonQuery(String.Format("DROP DATABASE IF EXISTS {0};", escapeduser));
 if mysql.Execute(String.Format("SELECT COUNT(*) as count FROM mysql.user WHERE user='{0}' AND host='localhost';", escapeduser)).Rows[0].Item[0] == 1 :
  mysql.ExecuteNonQuery(String.Format("DROP USER {0}@localhost;", escapeduser));

 mysql.ExecuteNonQuery(String.Format("CREATE DATABASE {0};", escapeduser));
 mysql.ExecuteNonQuery(String.Format("GRANT ALL PRIVILEGES ON {0}.* TO '{0}'@'localhost' IDENTIFIED BY '{1}';", escapeduser, escapedpass));

 mysql.ExecuteNonQuery(String.Format("USE '{0}';", escapeduser));
 mysql.ExecuteNonQuery(String.Format("""CREATE TABLE IF NOT EXISTS `account` (
  `uid` varchar(32) NOT NULL,
  `clan_id` int(11) UNSIGNED DEFAULT NULL,
  `name` varchar(64) NOT NULL,
  `money` double NOT NULL DEFAULT '0',
  `score` int(11) NOT NULL DEFAULT '0',
  `kills` int(11) UNSIGNED NOT NULL DEFAULT '0',
  `deaths` int(11) UNSIGNED NOT NULL DEFAULT '0',
  `first_connect_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_connect_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_disconnect_at` datetime DEFAULT NULL,
  `total_connections` int(11) UNSIGNED NOT NULL DEFAULT '1'
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;""", escapeduser));

当我运行脚本时,我得到以下错误:

您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解要在第1行的''exile_2'‘附近使用的正确语法

TCAdmin.SDK.Database.DatabaseException:您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以了解要在第1行的''exile_2'‘附近使用的正确语法->您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解在微软的第1行中使用的正确语法(“exile_2”)-内部异常堆栈跟踪的结束-在Microsoft.Scripting.Interpreter.Interpreter.RunInstructions(InterpretedFrame帧)在Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame帧)在Microsoft.Scripting.Interpreter.LightLambda.Run2T0,T1,TRet )在IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)在IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope作用域)。Scripting.Hosting.ScriptSource.Execute(ScriptScope范围)在TCAdmin.SDK.Scripting.Engines.IronPythonEngine.Execute(Credentials credentials)在TCAdmin.SDK.Scripting.ScriptEngineManager.Execute()在TCAdmin.GameHosting.SDK.Objects.GameScript.ExecuteEventScripts(ScriptEngineManager scriptEngineManager,ServiceEvent eventScript,ObjectList脚本) at TCAdmin.GameHosting.Automation.AutomationProcesses.Ձ() at TCAdmin.GameHosting.Automation.AutomationProcesses.Start() at TCAdmin.TaskScheduler.ModuleApi.StepBase.Start(Object参数)

EN

回答 1

Stack Overflow用户

发布于 2016-04-27 07:09:53

因此,我能够通过使用以下脚本导入实际的SQL文件来解决此问题。

代码语言:javascript
复制
import clr;
import System;

clr.AddReference("TCAdmin.DatabaseProviders.MySql");
clr.AddReference("TCAdmin.SDK");
from TCAdmin.DatabaseProviders.MySql import MySqlManager;
from System import String;
from System.IO import File, Path;

mysql_server="localhost";
mysql_root="root";
mysql_password="Password";

if not ThisService.Variables.HasValue("MySQLUser") :
Script.Exit();


backupfile=Path.Combine(ThisService.RootDirectory, "dbname.sql");

with MySqlManager() as mysql:
escapeduser=mysql.PrepareSqlValue(ThisService.Variables["MySQLUser"]);
escapedpass=mysql.PrepareSqlValue(ThisService.Variables["MySQLPassword"]);
mysql.Connect(String.Format("Data Source={0};User Id={1};Password={2};Pooling=False;", mysql_server, mysql_root, mysql_password));

mysql.ExecuteNonQuery(String.Format("DROP DATABASE IF EXISTS {0};", escapeduser));
if mysql.Execute(String.Format("SELECT * FROM mysql.user WHERE user='{0}' AND host='localhost';", escapeduser)).Rows.Count == 1 :
mysql.ExecuteNonQuery(String.Format("DROP USER {0}@localhost;", escapeduser));

mysql.ExecuteNonQuery(String.Format("CREATE DATABASE {0};",  escapeduser));
mysql.ExecuteNonQuery(String.Format("GRANT ALL PRIVILEGES ON {0}.* TO '{0}'@'localhost' IDENTIFIED BY '{1}';", escapeduser, escapedpass));

if File.Exists(backupfile) :
with MySqlManager() as mysql2:
mysql2.Connect(String.Format("Data Source={0};Database={1};User Id=    {1};Password={2};Pooling=False;", mysql_server,     ThisService.Variables["MySQLUser"], ThisService.Variables["MySQLPassword"]));
mysql2.ImportDatabase(backupfile);
File.Delete(backupfile);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36806224

复制
相关文章

相似问题

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