- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 pandas 数据帧附加到已创建的表,但我一直收到错误。
我正确连接到服务器。在服务器内部,有很多数据库,然后这个表在db_STAFF
数据库中。最初,我在做 df.to_sql(db_STAFF.dbo.JUNESALES)
但我意识到我应该在 connString 中引用它。我尝试了 dbo.JUNESALES
以及 JUNESALES
。下面错误中的表名根据我对表的称呼(dbo.JUNESALES
与 JUNESALES
)而变化,但实际错误保持不变。
请参阅下面的代码和错误,减去我确实包含的导入语句。
df = pd.DataFrame(lists_data)
connString = "DRIVER={Adaptive Server Enterprise};SERVER=XXXX,DATABASE = 'db_STAFF'...."
conn_url = quote_plus(connString)
new_connection = "sybase+pyodbc:///?odbc_connect={}".format(conn_url)
engine = create_engine(new_connection)
df.to_sql('[dbo].[JUNESALES]', con=engine, if_exists = 'append', index = False) #I also tried this without the brackets, I read that with brackets it worked for someone
engine.execute("SELECT * FROM dbo.JUNESALES ").fetchall()
cursor.execute(statement, parameters)
我在 df.to_sql
行收到这个错误
sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Sybase][ODBC Driver][Adaptive Server Enterprise] Incorrect syntax near '('.\n (102) (SQLExecDirectW)") [SQL: '\nCREATE TABLE "[dbo].[JUNESALES]" (\n\t"0" BIGINT NULL, \n\t"1" BIGINT NULL, \n\t"2" FLOAT NULL, \n\t"3" TEXT NULL, \n\t"4" BIT NULL, \n\t"5" BIT NULL, \n\t"6" FLOAT NULL, \n\t"7" FLOAT NULL, \n\t"8" FLOAT NULL, \n\t"9" FLOAT NULL, \n\t"10" FLOAT NULL, \n\t"11" BIGINT NULL, \n\tCHECK ("4" IN (0, 1)), \n\tCHECK ("5" IN (0, 1))\n)\n\n'] (Background on this error at: http://sqlalche.me/e/f405)
最佳答案
注意:我是 Sybase ASE DBA;我不使用 python/pandas/sqlalchemy/etc;因此,虽然我可以告诉您为什么 ASE 会生成错误,甚至会向您展示一种正确格式化 create table
的方法。命令...我不知道如何告诉您的应用程序如何(重新)编码 create table
命令(假设这是您无法直接控制的内容)。
错误消息告诉我们 create table
命令如下所示:
CREATE TABLE "[dbo].[JUNESALES]" (
"0" BIGINT NULL,
"1" BIGINT NULL,
"2" FLOAT NULL,
"3" TEXT NULL,
"4" BIT NULL,
"5" BIT NULL,
"6" FLOAT NULL,
"7" FLOAT NULL,
"8" FLOAT NULL,
"9" FLOAT NULL,
"10" FLOAT NULL,
"11" BIGINT NULL,
CHECK ("4" IN (0, 1)),
CHECK ("5" IN (0, 1))
)
嗯嗯,从哪里开始......
如果您要将其剪切粘贴到 ASE session 中(例如,通过 isql
命令行工具),您将得到相同的错误:
Msg 102, Level 15, State 181:
Server 'ASE200', Line 2:
Incorrect syntax near '('.
该命令似乎使用双引号试图转义非标准标识符。一个问题是,默认情况下,ASE 不会将双引号识别为非标准标识符的转义字符。要解决此问题,您需要启用 quoted_identifier
,例如:
set quoted_identifier on
CREATE TABLE ...
... snip ...
set quoted_identifier off -- or leave 'on' if you're going to continue using double quotes to designate non-standard identifiers
go
虽然这会让您通过 Msg 102
(语法)错误,您现在看到一些新错误:
Msg 2718, Level 16, State 1:
Server 'ASE200', Line 2:
Column or parameter #5: -- can't specify Null values on a column of type BIT.
Msg 2718, Level 16, State 1:
Server 'ASE200', Line 2:
Column or parameter #6: -- can't specify Null values on a column of type BIT.
要修复这些错误,您需要指定 BIT
列为 NOT NULL
或将数据类型更改为 BIT
以外的类型(例如,tinyint
?尽管您现在可能需要添加一些应用程序代码或 check
约束以将合法值限制为 0/1 ...??):
set quoted_identifier on
CREATE TABLE ...
... snip ...
"4" BIT not NULL,
"5" BIT not NULL,
... snip ...
set quoted_identifier off
go
此时应该创建表(即没有错误)但是......你还没有走出困境。
如果你运行 sp_help
你会看到你的表是这样列出的:
sp_help
go
Name Owner Object_type
--------------------------- ----- ------------
... snip ...
[dbo].[JUNESALES] dbo user table
... snip ...
这里的问题(当然?)是您将所有者 和 表包裹在一对双引号中;并且您尝试使用两种不同的方法来处理非标准标识符...双引号...方括号也无济于事;这里的主要问题是双引号告诉 ASE,方括号实际上是一个名为 [dbo].[JUNESALES]
的标识符的一部分。 ;还要注意句点 ( .
) 也被视为单个标识符的一部分(与所有者和表名之间的分隔符相对)。
如果您尝试通过在 [dbo]
周围放置双引号来修复 his和 [JUNESALES]
然后您会收到以下错误消息:
set quoted_identifier on
CREATE TABLE "[dbo]"."[JUNESALES]"
... snip ...
go
Msg 2734, Level 16, State 1:
Server 'ASE200', Line 2:
User name [dbo] does not exist in sysusers.
!!! notice the square brackets are considered as part of the user name !!!
好的,我们可以通过删除 [dbo]
中的方括号来解决这个问题, 但如果你不对表名做同样的事情...... create table
命令成功但括号成为表名的一部分(而不是用作分隔符),例如:
set quoted_identifier on
CREATE TABLE "dbo"."[JUNESALES]"
... snip ...
go
sp_help
go
Name Owner Object_type
--------------------------- ----- ------------
... snip ...
[JUNESALES] dbo user table
... snip ...
ASE 支持使用双引号作为非标准标识符的分隔符……如果您首先发出set quoted_identifier on
.
ASE 还支持使用方括号作为非标准标识符的定界符……并且没有必要发布set quoted_identier on
命令。
我建议您弄清楚如何仅使用一种方法来分隔非标准标识符(方括号更简洁,不需要发出 set quoted_identifier on
,并允许您使用双引号分隔文本/字符数据)。
set quoted_identifier off -- optional if already set to 'off'
CREATE TABLE [dbo].[JUNESALES] (
[0] BIGINT NULL,
[1] BIGINT NULL,
[2] FLOAT NULL,
[3] TEXT NULL,
[4] BIT not NULL,
[5] BIT not NULL,
[6] FLOAT NULL,
[7] FLOAT NULL,
[8] FLOAT NULL,
[9] FLOAT NULL,
[10] FLOAT NULL,
[11] BIGINT NULL,
CHECK ([4] IN (0, 1)),
CHECK ([5] IN (0, 1))
)
go
sp_help
go
Name Owner Object_type
--------------------------- ----- ------------
... snip ...
JUNESALES dbo user table
... snip ...
当然,dbo
周围的分隔符和 JUNESALES
不需要(即,这些是有效的标识符),但如果您愿意,欢迎您使用方括号(例如,作为一种标准编码方法来处理所有定界符,无论是标准的还是非标准的)。
注意:以上代码片段是针对 ASE 15.7 (SP138) 数据服务器执行的。
关于python - 任何人都知道为什么我在尝试将数据帧加载到 sybase 表时出现此错误? [SQL 炼金术],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51584049/
初学者 android 问题。好的,我已经成功写入文件。例如。 //获取文件名 String filename = getResources().getString(R.string.filename
我已经将相同的图像保存到/data/data/mypackage/img/中,现在我想显示这个全屏,我曾尝试使用 ACTION_VIEW 来显示 android 标准程序,但它不是从/data/dat
我正在使用Xcode 9,Swift 4。 我正在尝试使用以下代码从URL在ImageView中显示图像: func getImageFromUrl(sourceUrl: String) -> UII
我的 Ubuntu 安装 genymotion 有问题。主要是我无法调试我的数据库,因为通过 eclipse 中的 DBMS 和 shell 中的 adb 我无法查看/data/文件夹的内容。没有显示
我正在尝试用 PHP 发布一些 JSON 数据。但是出了点问题。 这是我的 html -- {% for x in sets %}
我观察到两种方法的结果不同。为什么是这样?我知道 lm 上发生了什么,但无法弄清楚 tslm 上发生了什么。 > library(forecast) > set.seed(2) > tts lm(t
我不确定为什么会这样!我有一个由 spring data elasticsearch 和 spring data jpa 使用的类,但是当我尝试运行我的应用程序时出现错误。 Error creatin
在 this vega 图表,如果我下载并转换 flare-dependencies.json使用以下 jq 到 csv命令, jq -r '(map(keys) | add | unique) as
我正在提交一个项目,我必须在其中创建一个带有表的 mysql 数据库。一切都在我这边进行,所以我只想检查如何将我所有的压缩文件发送给使用不同计算机的人。基本上,我如何为另一台计算机创建我的数据库文件,
我有一个应用程序可以将文本文件写入内部存储。我想仔细看看我的电脑。 我运行了 Toast.makeText 来显示路径,它说:/数据/数据/我的包 但是当我转到 Android Studio 的 An
我喜欢使用 Genymotion 模拟器以如此出色的速度加载 Android。它有非常好的速度,但仍然有一些不稳定的性能。 如何从 Eclipse 中的文件资源管理器访问 Genymotion 模拟器
我需要更改 Silverlight 中文本框的格式。数据通过 MVVM 绑定(bind)。 例如,有一个 int 属性,我将 1 添加到 setter 中的值并调用 OnPropertyChanged
我想向 Youtube Data API 提出请求,但我不需要访问任何用户信息。我只想浏览公共(public)视频并根据搜索词显示视频。 我可以在未经授权的情况下这样做吗? 最佳答案 YouTube
我已经设置了一个 Twilio 应用程序,我想向人们发送更新,但我不想回复单个文本。我只是想让他们在有问题时打电话。我一切正常,但我想在发送文本时显示传入文本,以确保我不会错过任何问题。我正在使用 p
我有一个带有表单的网站(目前它是纯 HTML,但我们正在切换到 JQuery)。流程是这样的: 接受用户的输入 --- 5 个整数 通过 REST 调用网络服务 在服务器端运行一些计算...并生成一个
假设我们有一个名为 configuration.js 的文件,当我们查看内部时,我们会看到: 'use strict'; var profile = { "project": "%Projec
这部分是对 Previous Question 的扩展我的: 我现在可以从我的 CI Controller 成功返回 JSON 数据,它返回: {"results":[{"id":"1","Sourc
有什么有效的方法可以删除 ios 中 CBL 的所有文档存储?我对此有疑问,或者,如果有人知道如何从本质上使该应用程序像刚刚安装一样,那也会非常有帮助。我们正在努力确保我们的注销实际上将应用程序设置为
我有一个 Rails 应用程序,它与其他 Rails 应用程序通信以进行数据插入。我使用 jQuery $.post 方法进行数据插入。对于插入,我的其他 Rails 应用程序显示 200 OK。但在
我正在为服务于发布请求的 API 调用运行单元测试。我正在传递请求正文,并且必须将响应作为帐户数据返回。但我只收到断言错误 注意:数据是从 Azure 中获取的 spec.js const accou
我是一名优秀的程序员,十分优秀!