在MySQL中,您可以插入多行,如下所示:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试做这样的事情时,我收到了一个错误.是否可以在SQLite数据库中一次插入多行?这样做的语法是什么?
可以获取包含表的所有列名的行,如下所示:
|id|foo|bar|age|street|address|
Run Code Online (Sandbox Code Playgroud)
我不喜欢用Pragma table_info(bla)
.
有没有办法配置sqlite3,以便默认显示标题?
我知道我可以.headers on
用来打开标题,但每次启动客户端时我都要继续键入它,因为设置不会在会话之间粘连.我希望标题永久保存.
是否有任何SQLite命令或第三方工具允许数据库转储在INSERT INTO
语句中包含列名?
代替
INSERT INTO "MyTable" VALUES ('A', 'B');
Run Code Online (Sandbox Code Playgroud)
我想看
INSERT INTO "MyTable" (Column1, Column2) VALUES ('A', 'B');
Run Code Online (Sandbox Code Playgroud)
.dump
SQLite中的命令仅提供第一个版本.
我有一个包含许多表的SQLite数据库.我们正在编写一个维护工具,它将从表中删除"陈旧"数据,直到该表的大小为总数据库文件的某个百分比或更小.
我知道如何确定数据库文件的大小 - 我是通过执行来实现的
PRAGMA PAGE_SIZE;
Run Code Online (Sandbox Code Playgroud)
和
PRAGMA PAGE_COUNT;
Run Code Online (Sandbox Code Playgroud)
在两个单独的查询中,并将两者相乘以获取文件大小(以字节为单位).是的,我知道我可以以字节为单位获取文件的大小,但这与我在其他数据库中完成它的方式类似,我想坚持使用它,至少目前是这样.
我的问题是我不知道如何获得TABLE的大小.必须有一些方法来做到这一点.谁能指出我正确的方向?
我有一个包含多个表的数据库,其中第一个字段定义为:
'ID' INTEGER NOT NULL UNIQUE ... PRIMARY_KEY('ID')
Run Code Online (Sandbox Code Playgroud)
我没有对这些表中的任何一个使用 AUTOINCRMENT 关键字,但我的数据库包含一个空的 sqlite_sequence 表,我无法删除该表。将 ID 字段为 NULL 值的记录插入到这些表中会生成 ID 字段的默认增量值,但不会填充或更新 sqlite_sequence 表。有什么方法可以将这些表的最后插入的 rowid 值重置为 0 吗?
我正在使用Python的sqlite3
模块,并希望在表没有任何行时获取表中所有列的列表.
通常,如果我创建一个像这样的数据库
import sqlite3
conn = sqlite3.connect(":memory:")
c = conn.cursor()
# create the table schema
c.execute('''create table stocks
(date text, trans text, symbol text,
qty real, price real)''')
conn.commit()
c.close()
Run Code Online (Sandbox Code Playgroud)
然后我可以用类似的东西获得列名
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute('select * from stocks')
r = c.fetchone()
print r.keys()
Run Code Online (Sandbox Code Playgroud)
问题是,如果表最初为空,则c.fetchone()
返回None
.如果有提交的行,那么我可以获得列名列表.
还有另一种方法吗?我浏览了官方sqlite3
模块文档,但在这方面找不到任何有用的东西.
我想我可以在表中放入一些虚拟数据,然后检索列名,然后删除该行,但我希望有一种更优雅的方式来做到这一点.
编辑:
似乎有几种方法可以做到:
获取用于创建表的SQL:
c.execute("""SELECT sql FROM sqlite_master
WHERE tbl_name = 'stocks' AND type = 'table'""")
Run Code Online (Sandbox Code Playgroud)使用PRAGMA
sqlite3中的语句:
c.execute("PRAGMA table_info(stocks)")
Run Code Online (Sandbox Code Playgroud)使用对象的.description …
我想打印我的sql表内容,因此,我想从表中检索列名.我遇到的一个解决方案是:
SELECT sql FROM sqlite_master WHERE tbl_name = 'table_name' AND type = 'table'
Run Code Online (Sandbox Code Playgroud)
但看起来我将不得不解析结果.
另一个建议是使用:
PRAGMA table_info(table_name);
Run Code Online (Sandbox Code Playgroud)
但是下面的sqlite页面建议不要使用它:http: //www.sqlite.org/pragma.html#pragma_full_column_names
有没有办法实现这一目标.还有什么是使用的语法
PRAGMA table_info(table_name);
Run Code Online (Sandbox Code Playgroud)
以上解决方案已从此处获取
出于调试目的,我试图在我的SQLite表中获得一个简单的列名列表.我正在使用SQLite.swift框架.
我的问题比如何在sqlite3/iPhone上获取列名列表更具体?所以我正在创建一个新问题.
运用
try db.execute("PRAGMA table_info(table_name);")
Run Code Online (Sandbox Code Playgroud)
类似于如何获取Sqlite3数据库上的列名列表?,但仍然不同:
出于调试目的,我编写了一个转储 SQLite3 表的闭包。输出不是很漂亮,但它可以工作:
sub something($)
{
my $dbh = shift;
my $me = '_dump_tables';
my $sep = '-' x length($me);
my $dump_table = sub ($) { # dump specified table or view
if (defined(my $rows = $dbh->selectall_arrayref(
"SELECT * FROM $_[0]"))) {
my $nsep = '-' x length($_[0]);
print "$me: $_[0]\n";
print "${sep}--${nsep}\n";
foreach (@$rows) {
print join('|', map { $_ // 'NULL' } @$_), "\n";
}
} else {
print "$me: Houston, we have a problem! …
Run Code Online (Sandbox Code Playgroud)