楼主说的是类似常见 GUI 客户端一样,直接在查询结果中直接修改数据、修改表结构,而不是用 SQL 代码来修改。所以 org-mode 不符合这个要求,你不能通过修改 +RESULTS:
中的内容来改变数据库。
org-mode 用来组织测试用例还是不错的,不需要双向互动。
楼主说的是类似常见 GUI 客户端一样,直接在查询结果中直接修改数据、修改表结构,而不是用 SQL 代码来修改。所以 org-mode 不符合这个要求,你不能通过修改 +RESULTS:
中的内容来改变数据库。
org-mode 用来组织测试用例还是不错的,不需要双向互动。
:dbpassword 那里,密码要加双引号,不然会报以下错误: org-babel-execute:sql: Wrong type argument: sequencep, 123456 这里 123456 是我的密码. 要用 :dbpassword “123456” 就没问题了,我猜是因为密码中可能会包含特殊字符.
我现在也用org babel,直接当notebook用。但也有些问题… 比如result是用org table渲染的,不支持column value里有换行或reserved symbols(如 “|”),不然整个result就乱了。
用org babel sql来改数据库结构定义这些应该不太好整,可以退一步,emacs org不做改数据库结构定义这些事, 只需要增删改查数据库里的数据就行。
我觉得数据库结构定义这些要慎重,确定下来就不要轻易改动,因为实际开发中情况往往是数据库一个小改动,到了后端,前端就是大改,特别是前端…(为了“兼容”后端可能返回的各种未知数据,不得不增加工作量)
emacs org不用管数据库结构,只管数据的增删改查,做成几个按钮可以点击(运行elisp)的形式,这样org-mode即是数据库管理工具的同时也可以是一个应用的前端
以前我也考虑过 org 只管数据的增删改查,但是这样的话那还不如 mysqlcli之类的工具好用
我理解数据增删改查指在完全不写sql语句的情况下通过可视化界面(不是图形化界面)实现。
我基本不在命令行下操作数据库,用的是adminer.php
(自已编译的版本),用久了发现数据结构固定下来就很少改了,在adminer
里大部分操作都是增删改查,其中查(搜索)
在org-mode里进行可能不是最好的选择,但改
是属于文本编辑的直接在org-mode里面进行在好不过了
将org作为文本编辑界面很常用,但将org作为数据查询的结果页面展示我估计很少有人怎么做吧。
下图是我将org作用数据查询结果的操作和结果页面
在org mode里修改数据的意思是,通过查询语句返回对应的行,然后可视化修改对应行的数据吗
我是写了一个服务端,org文件在操作时(点击按钮)把内容发送到服务端,服务端根据org文件的内容生成sql
语句执行,然后返回包含执行结果在内的完整的org文本到emacs
org中的操作代码差不多都类似这样: [[elisp:(progn (erase-buffer)(url-insert-file-contents "http://[::1]/org.php?from=home&a=del&title=org文件加载时自动展开折叠效果测试")(save-buffer)(next-line 2)(org-end-of-line))][删除(不可恢复)]]
还有很多问题没有解决,目前想不用url-insert-file-contents
了,因为会卡住emacs。
这里有个技巧,就是可以在服务器端返回结果中充分利用org-mode中文学编程的能力,比如服务器端生成的sql语句没有得到预期结果,需要将sql语句输出查看时可以这么写:
echo "#+BEGIN_SRC sql\n".$sql."#+END_SRC";
这样在org文件中就是以文学编程的形式查看sql语句。并使用undo
返回上一页面继续上一步的操作,emacs的undo在这里就相当于浏览器的后退键(但是更加灵活)
用org写复杂的sql query非常好用,配合noweb不要太爽。
如何实现sql自动提示呢?
可以选sql-language-server或是sqls。
sqls在lsp-mode中已集成。但是vscode插件的下载量很低。
所以我选了第一个,但是有错误,只要一补全就出错,加日志,跟踪执行,发现jsonrpc没有出错,出错的是console.time。tryReaderHeaders不能识别附加的调试信息,改变一下正则表达式就行了。
补全不了列名,连node里试验pg都没有结果,整了半天,删除里面的pg库,用全局的pg库总算是弄出来了。
sudo是怎么解决的?
在发现 vim 有 dadbod 后,发现 sqls 也蛮好用。晚上回来自己做了一个 brew tap,配置完之后开一个 sql-mysql
和一个 sql-mode
的 buffer 之后,补全体验也有了。也可以和 python-mode
一样 C-c C-c 执行,体验也蛮好的,可能只差一个 treemacs
一样的显示各个列名的东西,就和我平常用到的 navicat 感觉差不多了
如果熟悉 Ruby 和 ActiveRecord 可以试试这个: lululau/arql: Rails ActiveRecord is the best SQL query editor (github.com)
有 gif 康康什么样子吗,我 eglot 配置 sqls 可以连上去但是补全好像没用
谢谢,原来我是小写输入的所以补全不好使,改了下 sqls 配置 ok 了
看到这个帖子,sqlite 已经被集成到 Emacs core 里面了,感觉后面做 DB GUI 方便了些。