我正在尝试将数据帧写入MySQL表。这是我的代码:
import pandas as pd
import sqlalchemy
connectString="""mysql+pymysql://userName:passWord@hostIP/schema"""
engine = sqlalchemy.create_engine(connnectString)
connection=engine.connect()
myDataFrame.loc[:,['col1','col2']].to_sql('myTable',con=engine,index=True,if_exists='fail')
代码失败,似乎是权限错误。
OperationalError: (pymysql.err.OperationalError) (1142, "CREATE command denied to user 'userName'@'hostIP' for table 'myTable'") [SQL: '\nCREATE TABLE `myTable` (\n\ID BIGINT, \n\t`col1` BIGINT, \n\t`col2` BIGINT\n)\n\n']
要测试权限问题,我可以在运行以下命令时成功创建和编写表:
import pandas as pd
import sqlalchemy
connectString="""mysql+pymysql://userName:passWord@hostIP/schema"""
engine = sqlalchemy.create_engine(connnectString)
connection=engine.connect()
command="""create table myTable as
SELECT * FROM anotherTable"""
engine.execute(command)
connection.close()
此外,"显示拨款"我试图写的数据库上的命令向我显示我对它有写权限。数据库安装在Red Hat Enterprise Linux服务器上,我在同一操作系统上打开的jupyter-notebook上运行命令,但是在另一台机器上运行。
任何想法是怎么回事?你还需要其他信息吗?感谢。
答案 0 :(得分:2)
问题是我没有权限写一些模式,但有其他人的许可。
查看上面的代码:
connectString="""mysql+pymysql://userName:passWord@hostIP/schema"""
在这里,我没有" schema"的写权限,但有读权限。当我使用:
创建表时command="""create table myTable as
SELECT * FROM anotherTable"""
' myTable的'实际上是:' anotherSchemaWhereIhaveWritePermission'。' tableName'
mysql会正确创建一个表" tableName"在这个其他架构。所以在这里,初始连接中指定的模式并不重要。
当我在pandas中运行所谓的等效命令时:
myDataFrame.loc[:,['col1','col2']].to_sql('myTable',con=engine,index=True,if_exists='fail')
在这里,sql会尝试创建一个名为"' anotherSchemaWhereIhaveWritePermission'。' tableName'"'在我连接的原始架构中,我没有写入权限。因此错误。