import os,shutil,stat
import sqlite3 as sqlite
conn = sqlite.connect(':memory:')
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("mod_spatialite.so")')
cursor = conn.cursor()
from shapely import Point
pt = Point([1,2])
pt.wkt
'POINT (1 2)'
cursor.execute('CREATE TABLE MyTable (name TEXT NOT NULL, geom BLOB NOT NULL)')
cursor.execute("INSERT INTO MyTable (name, geom) VALUES ('one', GeomFromText('POINT(1 1)'))")
cursor.execute("INSERT INTO MyTable (name, geom) VALUES ('two', GeomFromText('POINT(2 2)'))")
cursor.execute("INSERT INTO MyTable (name, geom) VALUES ('three', GeomFromText('POINT(3 3)'))")
cursor.execute("SELECT name, AsText(geom) FROM MyTable;")
[print(rec) for rec in cursor]
('one', 'POINT(1 1)') ('two', 'POINT(2 2)') ('three', 'POINT(3 3)')
[None, None, None]
cursor.execute("SELECT name, AsText(geom) FROM mytable")
[print(rec) for rec in cursor]
('one', 'POINT(1 1)') ('two', 'POINT(2 2)') ('three', 'POINT(3 3)')
[None, None, None]
cursor.execute("SELECT name, AsGeoJSON(geom) FROM mytable")
[print(rec) for rec in cursor]
('one', '{"type":"Point","coordinates":[1,1]}') ('two', '{"type":"Point","coordinates":[2,2]}') ('three', '{"type":"Point","coordinates":[3,3]}')
[None, None, None]
UPDATE
SQL语句允许您修改任何列值。- 你只需要
SET
列名称和新的值即可替换当前的。你可以像往常一样使用GeomFromText()
函数获取几何值。PK_UID
列是一个特殊的函数,作为这个表的主要键。 - 在每个表中,PRIMARY KEY列都保证您唯一 一行可能包含一个选定的值,从而确保一致性。
如果你的一张表格,由于任何原因,没有主要的钥匙,别担心; SQLite自动管理表中每一行都有用,每个行的名称都是ROWID; 您可以直接引用SQL表达式,就像普通的列表一样。
还要注意,在这个例子中,你显然没有使用任何交易。(您既不使用BEGIN也不使用COMMIT)
- 一个新的事务隐式地为每个SQL语句被开始
- 并且在处理后自动执行隐式COMMIT SQL语句。
- 这可能很容易导致或多或少严重的性能下降; 到目前为止,SQLite更倾向于您明确的BEGIN和COMMIT 交易,特别是当你执行许多和许多 连续的INSERT和/或UPDATE。
选择数据创建新表格
以下示例需要原始的my_new_db.sqlite
数据库。 因此,避免我们执行的DELETE和UPDATE导致任何错位,现在重建它更好。
SQLite的SQL语法为您提供了一种直观的方式来创建一个新的表,并同时使用从另一个表格中选出的数据进行填充。